三种模块化
- es6: import / export;浏览器中主要使用
- commonjs: require / module.exports / exports;Node.js中主要使用
- amd: require / defined;用在浏览器中
ES6模块和CommonJS模块的差异
- CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。
- CommonJS 模块是运行时加载(支持动态导入),ES6 模块是编译时输出接口。
- CommonJS 模块是同步,ES6 模块是异步。
module.exports 与 exports
module变量代表当前的模块,exports是module的一个属性(即module.exports),它是对外的接口。加载某个模块的时候,就是加载该模块的module.exports。
const add = (num1, num2) => {
return num1 + num2
}
// 方法1
module.exports.add = add
// 方法2
module.exports = {
add,
}
为了方便,Node.js提供了一个exports变量,指向了module.exports。即
var exports = module.exports
于是,还可以用下面的方式来导出模块
...
exports.add = add
但是,注意不能给exports直接赋值,这样会改变原来exports的指向。