模块化

三种模块化

  • 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的指向。

你可能感兴趣的:(模块化)