var Person = function() {
this.name = 'Samuel';
}
module.exports = 'I am a string';//module.exports被声明指向了一个字符串
exports.one = 'Shervesi';
User.js
var P = require('./Person.js');
console.log(P);//'I am a string' //这是module.exports所提供的接口指向的
console.log(P.one);//这里会出现类型错误,因为负责暴露接口的module.exports已经导出了一个字符串,即是一个常量,因此不能携带one属性,exports所修饰的one属性被‘干掉’。
讓這個模組更純粹的寫法。
module.exports是require()方法調用模組的接口,而exports可以給模組添加更多的方法,而exports返回的是一個實例化對象,指向module.exports
比如對於一個構造函數來說:
Person.js
Use.js
因此可以將exports理解為給模組進行最後修飾的方法;
而module.exports則負責暴露一個接口供require()方法調用,若module.exports沒有被聲明指向,那它就默認的導出exports所指向的對象,如這樣一個場景:
Person.js
User.js
總結:
module.exports是模組導出的仲裁,它決定到底導出一個什麼東西,本質上就是提供給require()方法的一個回傳值,因此它可以是任何js基本類型(包括null);
exports是給導出模組進行修飾的輔助方法,但受module.exports的仲裁,決定模組是否能具有這個屬性。