1. 程式人生 > 其它 >Nodejs之什麼是模組化

Nodejs之什麼是模組化

1. 什麼是模組化

  • 檔案作用域

  • 通訊規則

    • 載入 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 的區別

  1. 每個模組中都有一個 module 物件

  2. module 物件中有一個 exports物件

  3. 我們可以把需要匯出的成員都掛載到 module.exports

    介面物件中

  4. 也就是:module.exports.xxx=xxx的方式,但是每次都module.exports.xxx=xxx很麻煩,點兒太多了

  5. 所以 Node 為了你方便。同時在每一個模組中都提供了一個成員叫:exports

  6. exports===module.exports 結果為true

  7. 當一個模組需要匯出單個成員的時候,這個時候必須使用 module.exports=xxx 的方式

  8. 不要使用 exports=xxx不管用

  9. 因為每個模組最終向外return 的是 module.exports

  10. 而 exports只是 module.exports 的一個引用

  11. 所以即便你為 exports=xx 重新賦值,也不會影響 module.exports

  12. 但是有一種賦值方式比較特殊 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 這個選項,目的是用來儲存依賴項資訊