Node module.exports
和ES6 之间有什么区别export default
?我试图弄清楚为什么export default
在Node.js 6.2.2中尝试出现“ __不是构造函数”错误。
'use strict'
class SlimShady {
constructor(options) {
this._options = options
}
sayName() {
return 'My name is Slim Shady.'
}
}
// This works
module.exports = SlimShady
'use strict'
class SlimShady {
constructor(options) {
this._options = options
}
sayName() {
return 'My name is Slim Shady.'
}
}
// This will cause the "SlimShady is not a constructor" error
// if in another file I try `let marshall = new SlimShady()`
export default SlimShady
问题是
在撰写本文时,没有环境本地支持ES6模块。在Node.js中使用它们时,您需要使用Babel之类的东西将模块转换为CommonJS。但是那到底是怎么发生的呢?
许多人认为module.exports = ...
等同于export default ...
和exports.foo ...
等同于export const foo = ...
。但这不是真的,或者至少不是Babel是如何做到的。
ES6 default
导出实际上也 被称为
导出,只是它default
是一个“保留”名称,并且对其有特殊的语法支持。让我们看一下Babel如何编译命名和默认导出:
// input
export const foo = 42;
export default 21;
// output
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var foo = exports.foo = 42;
exports.default = 21;
在这里,我们可以看到默认导出成为exports
对象的属性,就像foo
。
我们可以通过两种方式导入模块:使用CommonJS或使用ES6 import
语法。
您的问题: 我相信您正在执行以下操作:
var bar = require('./input');
new bar();
期望为其bar
分配默认导出的值。但正如我们在上面的示例中看到的那样,默认导出已分配给该default
属性!
因此,为了访问默认导出,我们实际上必须做
var bar = require('./input').default;
如果我们使用ES6模块语法,即
import bar from './input';
console.log(bar);
Babel会将其转换为
'use strict';
var _input = require('./input');
var _input2 = _interopRequireDefault(_input);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
console.log(_input2.default);
您会看到对的每个访问bar
都转换为访问.default
。
问题内容: 我在Node.js模块中找到了以下合同: 我不知道什么之间的不同和为什么都被用在这里。 问题答案: 设置允许在时像函数一样调用函数。简单地设置将不允许导出函数,因为节点导出了对象引用。以下代码不允许用户调用该函数。 module.js 以下内容无效。 如果设置以下内容,则将起作用。 安慰 基本上, node.js 不会导出当前引用的对象,而是导出最初引用的对象的属性。尽管 Node.j
Node的 和ES6的 有什么区别?我试图弄清楚为什么在Node.js6.2.2中尝试 时会出现“__is not a constructor”错误。
问题内容: 我正在尝试确定这两者之间是否有较大区别,而不是仅通过以下操作即可导入: 使用我可以做到: 我想知道除此以外是否还有其他差异和/或用例。 问题答案: 这是命名导出与默认导出。是导出一个或多个const声明的命名导出。 要强调的是:这里重要的是用于声明一个或多个const声明的关键字。也可以应用于其他声明,例如类或函数声明。 默认导出() 每个文件可以有一个默认导出。导入时,您必须指定一个
本文向大家介绍浅谈es6中export和export default的作用及区别,包括了浅谈es6中export和export default的作用及区别的使用技巧和注意事项,需要的朋友参考一下 作用: export和export default实现的功能相同,即:可用于导出(暴露)常量、函数、文件、模块等,以便其他文件调用。 区别: 1、export导出多个对象,export default只能
本文向大家介绍node.js中module.exports与exports用法上的区别,包括了node.js中module.exports与exports用法上的区别的使用技巧和注意事项,需要的朋友参考一下 Node.js 引入了模块(Module)概念,一个模块可以通过module.exports 或 exports 将函数、变量等导出,以使其它 JavaScript 脚本通过require(
本文向大家介绍详解Node.js中exports和module.exports的区别,包括了详解Node.js中exports和module.exports的区别的使用技巧和注意事项,需要的朋友参考一下 今天看了下node.js的require方法的源码,终于搞清楚exports和module.exports的区别了。 我们知道,node.js的模块暴露有两种方法。 1. 方式一:用exports