CommonJS 特性
- 每個文件是一個模塊,有自己的作用域
- 在模塊內部 module 變量代表模塊本身
- module.exports 屬性代表模塊對外接口
require 規則
-
/ 表示絕對路徑, ./ 表示相對於當前文件
-
支持js、json、node擴展名,不寫時會依次嘗試
-
不寫路徑則認爲是build-in 模塊或者各級 node_modules 內的第三模塊
require 特性
- module 被加載的時候執行,加載後緩存
- 一旦出現某個模塊被循環加載(互相引用),就只輸出已經執行的部分,還未執行的部分不會輸出
exports 是 module.exports 的簡寫形式,node文件編譯模擬
const exports = module.exports
(
function (exports,require,module,__filename,__dirname){
//code...
}
)
所以我們可以直接在exports上掛載屬性或方法,但是不能改變exports的指向
exports.test = 100 // 可以這樣用
exports = { //改變指向,錯誤用法
a: 1,
b: 2,
test: 100
}
當我們想要直接導出一個對象時可以用module.exports
module.exports = {
a: 1,
b: 2,
test: 100
}
exports默認爲mudule.exports的快捷方式,可以添加屬性但是不能修改指向,修改指向後就會成爲一個普通對象。因爲在CommonJS中模塊對外的輸出永遠都是module.exports。