参考:前端模块化
commonJS 规范规定,每个模块内部,module
变量代表当前模块。这个变量是一个对象,它的 exports
属性(即 module.exports
)是对外的接口。加载某个模块,其实是加载该模块的 module.exports
属性。
// 定义模块math.js
var basicNum = 0;
function add(a, b) {
return a + b;
}
// 定义当前模块对外输出的接口
module.exports = { // 在这里协商需要向外暴露的函数、变量
add: add,
basicNum: basicNum
};
// 用require加载模块
var math = require('./math');
console.log(math.add(2, 5)); // 7
commonJS用同步的方式加载模块,即脚本代码在 require
的时候,就会全部执行。一旦出现某个模块被”循环加载”,就只输出已经执行的部分,还未执行的部分不会输出。
exports 和 module.exports 的使用
如果要对外暴露属性或方法,就用 exports 就行,要暴露对象(类似class,包含了很多属性和方法),就用 module.exports。