Node 中的模块机制
之前没有模块化
模块化的历程
简单来说:
IIFE——CommonJS——AMD/CMD——ES6 模块...
什么是 Node 模块
在正是分析 Node 模块机制之前,我们需要明确定义什么是 Node 模块。通常来说,Node 模块可分为两大类:
- 核心模块:Node 提供的内置模块,在安装 Node 时已经被编译成二进制可执行文件
- 文件模块:用户编写的模块,可以是自己写的,也可以使通过 npm 安全的
exports 对象本质上是 module.exports 的引用。也就是说,下面两行代码是等价的
// 导出 add 函数
exports.add = add;
// 和上面一行代码是一样的
module.exports.add = add;
module 对象
module 在每个模块中表示对当前模块的引用。而 module.exports 又可以通过全局对象 exports 来引用。module 并不是一个全局对象,而更像一个模块内部对象
module.children
这个模块引入的所有模块对象
module.exports
module.exports 通过模块系统创建。
export 与 module.export 的区别
导出多个成员(必须在对象中)
exports.a = 123;
exports.b = 'hello';
exports.c = function () {
console.log('ccc');
};
exports.d = {
foo: 'bar',
};
导出多个成员也可以这样写
module.exports = {
foo: 'bar',
add: function () {
console.log('aa');
},
};
导出单个成员(拿到的就是:函数,字符串)
module.exports = 'hello';
以下情况会覆盖:
module.exports = 'hello'
// 以这个为准,后者会覆盖前者
module.exports = function(x, y) {
return x + y
}
exports 是 module.exports 的一个引用
console.log(exports === module.exports) // => true
exports.foo = 'bar'
// 等价于
module.exports.foo = 'bar'