1. 程式人生 > 程式設計 >Node.js中的模組化,npm包管理器詳解

Node.js中的模組化,npm包管理器詳解

目錄
  • 模組化的基本概念
    • 什麼是模組化
    • 模組化拆分的好處
  • Node.中的模組化
    • Node.js中模組的分類
    • 載入模組
    • 模組作用域
    • 向外共享模組作用域中的成員
      • module物件
      • exports物件
  • npm與包
      • 如何下載包
      • 在專案中安裝包的命令
    • 解決下包速度慢的問題
      • 為什麼下包速度慢
      • 解決方法一——淘寶NPM映象伺服器
      • 解決方法二——切換npm的下包映象源
      • 解決方法三——nrm
  • 總結

    模組化的基本概念

    什麼是模組化

    模組化是指解決一個複雜問題時,自頂向下逐層把系統劃分成若干模組的過程。對於整個系統來說,模組是可組合、分解和更換的單元。

    模組是Node.js 應用程式的基本組成部分,檔案和模組是一一對應的。換言之,一個 Node.js 檔案就是一個模組,這個檔案可能是 程式碼、JSON 或者編譯過的C/C++ 擴充套件。

    領域中的模組化,就是遵守固定的規則,把一個大檔案拆成獨立並互相依賴的多個小模組。

    模組化拆分的好處

    • 提高了程式碼的複用性;
    • 提高了程式碼的可維護性;
    • 可以實現按需載入。

    Node.js中的模組化

    Node.js中模組的分類

    Node.js 中根據模組來源的不同,將模組分為了 3 大類,分別是:

    1、內建模組(內建模組是由 Node.js 官方提供的,例如 fs、path、http 等)

    2、自定義模組(使用者建立的每個 .js 檔案,都是自定義模組)

    3、第三方模組(由第三方開發出來的模組,並非官方提供的內建模組,也不是使用者建立的自定義模組,使用前需要先下載)

    載入模組

    使用 require() 方法,可以載入需要的內建模組、使用者自定義模組、第三方模組進行使用。

    //載入內建的 fs 模組
    const fs = require('fs')
     
    //載入使用者自定義的模組
    const custom = require('./custom.js')
     
    //載入第三方模組
    const moment = require('moment')

    注意:使用require()方法載入其他模組時,會執行被載入模組中的程式碼

    模組作用域

    和函式作用域類似,在自定義模組中定義的變數、方法等成員,只能在當前模組內被訪問,這種模組級別的訪問限制,叫做模組作用域。

    //檔案:01.custom.js
    const username = '張三'    //在模組作用域中定義常量user
    name function sayHello(){ console.log('大家好,我是:'+username) //在模組作用域中定義函式sayHello } //檔案:02.custom.js const custom = require('./01.custom') //匯入01.custom檔案 console.log(custom) //輸出{}空物件,在02.custom.js模組中無法訪問01.custom.js模組中的私有成員

    向外共享模組作用域中的成員

    module物件

    在每個 .js自定義模組中都有一個module物件,它裡面儲存了和當前模組有關的資訊。

    在自定義模組中,可以使用 module.exports 物件,將模組內的成員共享出去,供外界使用。 外界用 require() 方法匯入自定義模組時,得到的就是 module.exports 所指向的物件。

    注意:使用 require() 方法匯入模組時,匯入的結果,永遠以 module.exports 指向的物件為準

    例如:

    //檔案:01.custom.js
    module.exports.username = 'zsOyqoxZEAb'  //向module.exports物件上掛載屬性username
    module.exports.sayHello = function(){
       console.log('Hello')   //在模組作用域中定義函式sayHello
    }
    module.exports = {    //讓module.exports指向一個全新的物件
       nickname:'小明',sayHi(){
         console.log('Hi!')
       }
    }
     
    //檔案:02.custom.js
    const custom = require('./01.custom.js')   //匯入01.custom檔案
    console.log(custom)  
    //輸出{ nickname:'小明',sayHi:[Function:sayHi]}

    exports物件

    由於 module.exports 單詞寫起來比較複雜,為了簡化向外共享成員的程式碼,Node 提供了 exports 物件。預設情況 下,exports 和 module.exports 指向同一個物件。最終共享的結果,還是以 module.exports 指向的物件為準。

    exports和module.exports的使用誤區

    require()模組時,得到的永遠是 module.exports指向的物件。因此為了防止混亂,建議不要在同一個模組中同時使用exports和 module.exports。

    注意:每個模組內部,module變數代表當前模組;

    module變數是一個物件,它的exports屬性(即 module.exports)是對外的介面

    載入某個模組,其實是載入該模組的 module.exports屬性,require()方法用於載入模組。

    npm與包

    Node.js 中的第三方模組又叫做包。 就像電腦和計算機指的是相同的東西,第三方模組和包指的是同一個概念,只不過叫法不同。

    由於 Node.js 的內建模組僅提供了一些底層的 API,導致在基於內建模組進行專案開發時,效率很低。 包是基於內建模組封裝出來的,提供了更高階、更方便的 API,極大的提高了開發效率。 包和內建模組之間的關係,類似於 和 瀏覽器內建 API 之間的關係。

    如何下載包

    npm,Inc. 公司提供了一個包管理工具,我們可以使用這個包管理工具,從 https://registry.npmjs.org/ 伺服器把需要的包下載到本地使用。 這個包管理工具的名字叫做 Node Package Manager(簡稱 npm 包管理工具),這個包管理工具隨著 Node.js 的安 裝包一起被安裝http://www.cppcns.com到了使用者的電腦上。 大家可以在終端中執行 npm -v 命令,來檢視自己電腦上所安裝的 npm 包管理工具的版本。

    首先運用window徽標加R開啟,並輸入cmd,開啟視窗輸入npm -v。

    Node.js中的模組化,npm包管理器詳解

    在專案中安裝包的命令

    我所使用的軟體為WebStorm2021,以下的指令都是在WebStorm2021軟體的終端下進行的。

    npm install 包的完整名稱 (在執行 npm install 命令時,如果在後面加上 -g 引數,則會把包安裝為全域性包。)

    在安裝包完成後,我們會看到專案資料夾下多一個叫node_modules 的資料夾和 package-lock.json 的配置檔案。

    node_modules 資料夾用來存放所有已安裝到專案中的包。require() 匯入第三方包時,就是從這個目錄中查詢並載入包。 package-lock.json 配置檔案用來記錄 node_modules 目錄下的每一個包的下載資訊,例如包的名字、版本號、下載地址等。

    Node.js中的模組化,npm包管理器詳解

    說明:安裝包必須在網路環境優良的情況下進行。

    安裝指定版本的包

    使用 npm install 命令安裝包的時候,會自動安裝最新版本的包。如果需要安裝指定版本的包,可以在包名之後,通過 @ 符號指定具體的版本。例如:npm install [email protected]

    說明:可以執行 npm install 命令(或 npm i)一次性安裝所有的依賴包。(是在剔除了 node_modules 的專案之後的情況下)。

    解除安裝包

    解除安裝包的命令為:npm uninstall 包的完整名稱

    解決下包速度慢的問題

    為什麼下包速度慢

    在使用 npm 下包的時候,預設從國外的 https://registry.npmjs.org/ 伺服器進行下載,此時,網路資料的傳輸需要經 過漫長的海底光纜,因此下包速度會很慢。

    解決方法一——淘寶NPM映象伺服器

    淘寶在國內搭建了一個伺服器,專門把國外官方伺服器上的包同步到國內的伺服器,然後在國內提供下包的服務。 從而極大的提高了下包的速度。(映象(Mirroring)是一種檔案儲存形式,一個磁碟上的資料在另一個磁碟上存在一個完全相同的副本即為映象)

    Node.js中的模組化,npm包管理器詳解

    解決方法二——切換npm的下包映象源

    下包的映象源,指的就是下包的伺服器地址。

    Node.js中的模組化,npm包管理器詳解

    解決方法三——nrm

    為了更方便的切換下包的映象源,我們可以安裝 nrm 這個小工具,利用 nrm 提供的終端命令,可以快速檢視和切換下包的映象源

    Node.js中的模組化,npm包管理器詳解

    總結

    本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注我們的更多OyqoxZEAb內容!