1. 程式人生 > >CommonJS 規範中的 module、module.exports 區別

CommonJS 規範中的 module、module.exports 區別

code 運行 amd urn 如果 對象 com fun func

CommonJS 規範中的 module、module.exports 區別

CommonJS規範規定,每個模塊內部,module變量代表當前模塊。這個變量是一個對象,它的exports屬性(即module.exports)是對外的接口。加載某個模塊,其實是加載該模塊的module.exports屬性。
module.exports屬性表示當前模塊對外輸出的接口,其他文件加載該模塊,實際上就是讀取module.exports變量。
為了方便,Node為每個模塊提供一個exports變量,指向module.exports。這等同在每個模塊頭部,有一行這樣的命令。

var exports = module.exports;

註意,不能直接將exports變量指向一個值,因為這樣等於切斷了exports與module.exports的聯系。

exports.hello = function() {
  return ‘hello‘;
};

module.exports = ‘Hello world‘;

上面代碼中,hello函數是無法對外輸出的,因為module.exports被重新賦值了。
這意味著,如果一個模塊的對外接口,就是一個單一的值,不能使用exports輸出,只能使用module.exports輸出。

何時確定模塊的依賴關系,以及輸入和輸出的變量:

CommonJS 和 AMD 都只能在運行時確定這些東西,是“運行時加載”;
es6 編譯時就可確定,是“編譯時加載”或者靜態加載。

CommonJS 規範中的 module、module.exports 區別