RESTful
npm(Node Packge Manager)是一個依附在node.js執行環境中的主流線上套件庫,開發人員可以在node.js的環境中,透過npm來下載各式各樣的javaScript套件使用。並且在npm中統一管理不同專案所使用的套件。
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」的資料夾。
npm擁有廣大的軟體生態系,package.json是掌管專案資訊的重要檔案。並且,每個專案都需要使用package.json去設定所使用到的library到底有什麼,並記錄所有的dependency(依賴)關係。
對於有在進行版本控制或者是嚴謹開發的程式中,package-lock.json便是很重要的存在。這個檔案它有以下特性:
也因為有package-lock.json,便可以讓不同環境中的專案在每次部屬時,保持一樣的版本。杜絕重新下載套件後,因為套件版本號不同的關係,造成程式出現錯誤的情形。
套件的實際儲存位置,將會在每個init過後的專案中出現,存放每個專案所依賴的套件。
完成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。
若今天你有一個專案需要在版本控制中部屬到不同環境,但library的數量與容量卻不利於git的管理,便可以利用package.json的特性執行:
npm install
只要install後頭沒有library名稱,直接執行這個指令,npm便自動將package.json所缺的Dependency裝回,並且符合package-lock.json中所記載的版本號。
不需要將龐大的node_modules資料夾上傳至git中,只需要保存package.json與package-lock.json。
在push專案文件前,我們已經知道某些資料夾的內容不需要上傳,這時我們就需要使用.gitignore。它的存在會幫我排除檔案或資料夾的上傳 。
像是node_modules的套件內容在網路上全部都下載的到,就不用被push到我們的git儲存庫中。
//新建「.gitignore」檔案在專案根目錄,並直接鍵入需要被排除的資料夾名稱。
node_modules
若是要移除專案中的某個套件,便可以執行:
npm uninstall <套件名稱>
執行刪除後,將會統一更新package.json、package-lock.json與node_modules的內容。
若要將專案中的某個套件進行升級,執行以下指令:
npm update <套件名稱>
若是要一次升級專案中所有的套件,執行以下命令:
npm update
不管是哪種更新方法,都將會更新package-lock.json中的版本資訊。