node.js的exports、module.exports与ES6的export、export default深入详解
简介
在 Node.js 中,我们可以通过模块系统(Module System)来定义和使用模块。模块可以是一个文件或用 npm 安装的一个包。在模块中,我们可以导出(Export)一些变量、函数或类,供其他模块使用。
在 Node.js 中,有两个类似但不同的模块导出机制:exports 和 module.exports。而在 ES6 中,则有 export 和 export default。
exports 和 module.exports
exports 和 module.exports 都可以把对象暴露给其他模块。但是,它们之间有什么区别呢?
让我们看下面这个示例:
// lib.js
exports.foo = function () {
console.log('hello, world!');
};
// app.js
const lib = require('./lib');
lib.foo();
在这个示例中,我们使用了 exports 来导出一个名为 foo 的函数,然后在 app.js 中使用 require('./lib') 来引入这个模块,并调用了 foo 函数。这个示例是可以正常工作的。
实际上,Node.js 内部对 exports 和 module.exports 的处理机制是这样的:
exports = module.exports = {};
也就是说,exports 和 module.exports 实际上是指向同一个对象的引用。因此,我们可以使用 exports.xx 和 module.exports.xx 这两种方式来向外暴露变量、函数或类。
但是,如果我们将 exports 直接赋值为一个新的对象,例如:
// lib.js
exports = {
foo: function () {
console.log('hello, world!');
}
};
// app.js
const lib = require('./lib');
lib.foo();
这个示例是不会工作的。原因是 exports 的指向被改变了,而 module.exports 并没有受到影响。
因此,如果我们想在 Node.js 中使用 exports 暴露变量、函数或类,就需要像这样使用:
// lib.js
exports.foo = function () {
console.log('hello, world!');
};
// app.js
const lib = require('./lib');
lib.foo();
或者使用如下方式:
// lib.js
module.exports = {
foo: function () {
console.log('hello, world!');
}
};
// app.js
const lib = require('./lib');
lib.foo();
export 和 export default
在 ES6 中,可以使用 export 和 export default 来向外暴露变量、函数或类。
这两者的区别在于,export 可以暴露多个变量、函数或类,而 export default 只能暴露一个默认变量、函数或类。因此,使用 export 和 export default 的时候,需要注意一下它们的用法。
使用 export 默认导出的变量、函数或类,可以用 import 导入并且可以使用任意名称来指代它们。示例代码如下:
// lib.js
export default function () {
console.log('hello, world!');
}
// app.js
import foo from './lib';
foo();
在这个示例中,我们使用 export default 导出了一个函数,并在 app.js 中使用 import xxx from './lib' 来导入这个函数。
如果我们想使用 export 导出多个变量、函数或类,可以使用如下方式:
// lib.js
export function foo () {
console.log('foo');
}
export function bar () {
console.log('bar');
}
// app.js
import { foo, bar } from './lib';
foo();
bar();
在这个示例中,我们使用 export 导出了两个函数,并在 app.js 中使用 import { xxx, xxx } from './lib' 来导入这两个函数。
总结
Node.js 的 exports 和 module.exports 可以用来向外暴露变量、函数或类,而 export 和 export default 则是 ES6 中用来向外暴露变量、函数或类的关键字。
需要注意的是,在 Node.js 中,exports 和 module.exports 的区别在于它们内部处理机制的差异。如果想暴露多个变量、函数或类,建议使用 exports;如果想暴露一个默认变量、函数或类,建议使用 export default。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js的exports、module.exports与ES6的export、export default深入详解 - Python技术站