Try   HackMD

NPM套件管理器常用命令與原理

tags: RESTful

npm(Node Packge Manager)是一個依附在node.js執行環境中的主流線上套件庫,開發人員可以在node.js的環境中,透過npm來下載各式各樣的javaScript套件使用。並且在npm中統一管理不同專案所使用的套件。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
目錄

初始化

init

npm init

在init執行的過程中,會以詢答的方式依序要你完成一些必要資訊。

name: 專案名,預設為目錄名。
description: 專案描述。
entry point: 專案入口點,主要的邏輯檔案或是執行開始的檔案,通常為app.js或是為空。
test command: 專案測試指令。
git repository: 專案原始碼的版本控管位置(URL)。
keywoard: 專案關鍵字
author: 專案作者,(author-name <author@email.com>)。
license: 專案版權。

init 指令的動作很簡單,便是在目前所在目錄中生成「package.json」的boilerplate(樣板)文件,與「package-lock.json」的版本資訊文件,以及名為「node_modules」的資料夾。

package.json

npm擁有廣大的軟體生態系,package.json是掌管專案資訊的重要檔案。並且,每個專案都需要使用package.json去設定所使用到的library到底有什麼,並記錄所有的dependency(依賴)關係。

package-lock.json

對於有在進行版本控制或者是嚴謹開發的程式中,package-lock.json便是很重要的存在。這個檔案它有以下特性:

  1. 每次 npm install / uninstall /update 都會更新
  2. 紀錄每個套件的詳細版本
  3. 紀錄套件的 tarball(套件壓縮檔),是從哪個 url 下載來的
  4. 使用 hash(雜湊),確認檔案是否損壞
  5. 以一個 require 欄位,說明這個 dependency 是被哪個函式庫所要求的

也因為有package-lock.json,便可以讓不同環境中的專案在每次部屬時,保持一樣的版本。杜絕重新下載套件後,因為套件版本號不同的關係,造成程式出現錯誤的情形。

node_modules

套件的實際儲存位置,將會在每個init過後的專案中出現,存放每個專案所依賴的套件。

套件管理

install

完成init後,便可以開始安裝專案所需要的套件,只要執行:

npm install <套件名稱>

便可以安裝所需套件,比如說:

npm install jquery

就會安裝jquery library到node_modules資料夾中,並且在package.json中留下專案與套件的dependency(相依性)。

為什麼npm要記錄我們裝過哪些套件?

若往後有人要使用你所撰寫的code,便可以透過紀錄輕易了解專案的dependency,甚至可以確定你所使用的library版本。

為什麼library要特地使用node_modules資料夾另外儲存

若今天有兩個專案在相同library卻是不同版本號的情形下開發,就必須要獨立這兩個library的位置。比如說:A、B專案分別使用SweetAlert 1與2,這兩個library便會各自安裝在各自的目錄中,保持每個開發環境永遠不會有互相衝突的機會,而這個資料夾就是node_modules。

install 與Git相互配合

若今天你有一個專案需要在版本控制中部屬到不同環境,但library的數量與容量卻不利於git的管理,便可以利用package.json的特性執行:

npm install

只要install後頭沒有library名稱,直接執行這個指令,npm便自動將package.json所缺的Dependency裝回,並且符合package-lock.json中所記載的版本號。
不需要將龐大的node_modules資料夾上傳至git中,只需要保存package.json與package-lock.json。

建立.gitignore

在push專案文件前,我們已經知道某些資料夾的內容不需要上傳,這時我們就需要使用.gitignore。它的存在會幫我排除檔案或資料夾的上傳 。
像是node_modules的套件內容在網路上全部都下載的到,就不用被push到我們的git儲存庫中。

//新建「.gitignore」檔案在專案根目錄,並直接鍵入需要被排除的資料夾名稱。
node_modules

uninstall & update

刪除套件

若是要移除專案中的某個套件,便可以執行:

npm uninstall <套件名稱>

執行刪除後,將會統一更新package.json、package-lock.json與node_modules的內容。

更新單一套件

若要將專案中的某個套件進行升級,執行以下指令:

npm update <套件名稱>

更新全部套件

若是要一次升級專案中所有的套件,執行以下命令:

npm update

不管是哪種更新方法,都將會更新package-lock.json中的版本資訊。