// index.js var something = require('./requireMe'); something(); // requireMe.js exports.something = function(){ console.log('am a function'); } // 以上代码会报错,因为 require 出来的 module.exports 是一个object,不能直接执行 //修改方式一 // requireMe.js module.exports = function(){ console.log('am a function'); } // 当把代码改成上面这样,就不会报错,因为此时的 module.exports 是一个 function,可以直接执行。 // 修改方式二 // index.js var something = require('./requireMe'); something.something(); // 因为这时候 require 出来的是一个 object,有一个 something 的属性,所以可以这样调用执行。
exports = module.exports = {};
- exports 是 module.exports 的一个引用
- module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {}
- require 引用模块后,返回的是 module.exports 而不是 exports!!!!!
- exports.xxx 相当于在导出对象上挂属性,该属性对调用模块直接可见
- exports = 相当于给 exports 对象重新赋值,调用模块不能访问 exports 对象及其属性
- 如果此模块是一个类,就应该直接赋值 module.exports,这样调用者就是一个类构造器,可以直接 new 实例。
我的理解:export暴露的是方法 ,module.export暴露的是模块。