Nodejs之什麼是模組化
-
檔案作用域
-
通訊規則
-
載入 require
-
匯出
-
2. CommonJS 模組規範
在 Node 中的 JavaScript 還有一個很重要的概念:模組系統
- 模組作用域
- 使用 require 方法用來載入模組
- 使用 exports 介面物件用來匯出模組中的成員
3. 載入 require
語法:
var 自定義變數名稱=require('模組')
兩個作用:
-
執行被載入模組中的程式碼
-
得到被載入模組中的
exports
匯出介面物件
4. 匯出 exports
-
Node 中是模組作用域,預設檔案中所有的成員只在當前檔案模組有效
-
對於希望可以被其它模組訪問的成員,我們就需要把這些公開成員都掛載到
exports
介面物件中就可以了匯出多個成員(必須在物件中):
exports.a=123
exports.b='hello'
exports.c=function(){
console.log('ccc')
}
exports.d={
foo:'bar'
}匯出單個成員(拿到的就是:函式,字串):
module.exports='hello'
以下情況會覆蓋:
module.exports='hello'
//以這個為準,後者會覆蓋前者
module.exports= function (x,y){
return x+y
}也可以這樣來匯出多個成員:
module.exports={
add:function(){
return x+y
},
str:'hello'
}
5.原理解析
exports 和 module.exports
的引用
console.log(exports===module.exports)//=>true
exports.foo='bar'
// 等價於
module.exports.foo='bar'
exports 和 module.exports 的區別
-
每個模組中都有一個
module
物件 -
module 物件中有一個
exports
物件 -
我們可以把需要匯出的成員都掛載到
module.exports
-
也就是:
module.exports.xxx=xxx
的方式,但是每次都module.exports.xxx=xxx
很麻煩,點兒太多了 -
所以 Node 為了你方便。同時在每一個模組中都提供了一個成員叫:
exports
-
exports===module.exports
結果為true
-
當一個模組需要匯出單個成員的時候,這個時候必須使用
module.exports=xxx
的方式 -
不要使用
exports=xxx
不管用 -
因為每個模組最終向外return 的是
module.exports
-
而 exports只是
module.exports
的一個引用 -
所以即便你為
exports=xx
重新賦值,也不會影響module.exports
-
但是有一種賦值方式比較特殊
exports=module.exports
這個用來重新建立引用關係的
require 方法載入規則
-
核心模組
-
模組名
-
-
第三方模組
-
模組名
-
-
使用者自己寫的
-
路徑
-
-
優先從快取載入
-
判斷模組標識
-
核心模組
-
第三方模組
-
自己寫的模組
npm
-
node package manager
package.json
我們建議每一個專案都要有一個
package.json
檔案(包描述檔案,就像產品說明書一樣)給人踏實的感覺。這個檔案可以通過
npm init
的方式來自動初始化出來。
{
"name": "npm-demo",
"version": "1.0.0",
"description": "這是一個測試專案",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "liyouhong",
"license": "ISC",
"dependencies": {
"art-template": "^4.13.2"
}
}
Is this OK? (yes) yes
對於咱們目前來講,最有用的是那個 dependencies 選項,可以用來幫我們儲存第三方包的依賴資訊。
如果你的 node_modules 刪除了也不用擔心,我們只需要,npm install 就會自動把 package.json 中的 dependencies 中所有的依賴項都下載回來。
-
建議每個專案的根目錄下都有一個 package.json 檔案
-
建議執行 npm install 包名的 時候都加上 --save 這個選項,目的是用來儲存依賴項資訊
-
-