1. 依靠commonJs规范建立模块机制
commonJs规范:
引入 require
导出 exports,且exports只能是一个对象,暴露的API只能作为此对象的属性
2. 于commonJs的区别
nodejs中,真正的对外暴露的是module.exports 这个特殊对象
exports只是个普通变量,默认绑定module.exports
知乎上一个回答: (也可参考狼书1)
2.1模块并不一定返回实例化的对象,而是可以是任何合法的js对象:boole、string、obj、date等等。
3 最佳实践
module.exports 和 exports 一起使用可能会出现问题,比如
exports.a = function() { console.log("a")} // a API 并没有被导出
module.exports = 'hello world'
3.1 如果模块是一个特定类型,用module.exports
module.exports = function() {}
3.2 如果模块是一个典型实例化对象,则用exports
exports.name = "tom"
exports.call = function() {}