node--module模塊node
摘要:json
主要是從module的幾個特性講解緩存
1. 穩定性 模塊化
export.a = function() {}; export.b = function() {};
這裏兩個函數都是被添加到exports根部的對象上,模塊內本地變量是私有的。函數
2. 訪問主模塊ui
require.main === module
若是直接用node執行某個文件,那這個文件就是主模塊,默認被賦值給require.main。spa
3. 緩存code
模塊在第一次加載後就會被緩存,屢次調用不會致使模塊的代碼屢次執行,能夠但會'部分完成'的對象,從而容許加載依賴的模塊,因此不會致使循環依賴。對象
4. 循環blog
當循環調用require()時,一個模塊可能在未完成執行時被返回。
執行順序: main.js b.js a.js b.js ->done a.js ->done main.js -> done
5. 目錄做爲模塊
require()尋找路徑先經過尋找package.json中的main模塊,在根據main模塊的路徑,尋找當前所在的路徑位置
6. 模塊包裝器(劃重點)
在執行代碼前,node.js會使用下面這個函數把文件包裝起來
(function(exports, require, module, __filename, __dirname) { //.......真正要執行的部分 })
包裝的緣由
(1)保證定義的變量的模塊化
(2)提供一些看似全局,但其實是模塊特定的變量
7. 模塊的做用域
(1) __dirname: 當前木塊的目錄
(2)__filename: 當前木塊的文件名(局對路徑)
(3)exports: exports雖然是module.exports的簡寫,可是一旦 exports被賦值,module.exports就沒法改變這個值了
(4)module: 在每一個模塊中,module
的自由變量是一個指向表示當前模塊的對象的引用。 爲了方便,module.exports
也能夠經過全局模塊的 exports
對象訪問。 module
實際上不是全局的,而是每一個模塊本地的。