[Note] NPM
NPM,全名 Node Package Manager 套件管理工具,是 Node.js 預設的 node 套件管理工具,在本機端安裝 Node.js 時也會一併安裝。主要用於管理基於 Node.js 的 JavaScript 套件。
-
套件:我們不需要重新開發就能使用別人已經開發好的程式碼
-
套件管理工具:當使用到到的套件愈來愈多,並且版本與相容性的管理愈來愈複雜時,就需要一個類似目錄的東西,來讓我們統一管理套件(安裝、升級、刪除)
Node.js 是能夠執行 JavaScript 的一個「運行環境」。在 Node.js 出現以前 JavaScript 「只能」在瀏覽器上運行。
NPM 的主要功能
- 套件管理:安裝、更新、管理和分享 JavaScript 的依賴。
- 透過 NPM 命令執行各種操作,例如安裝套件 (
npm install)、運行腳本 (npm run) 等。 - 執行專案腳本:可以在 package.json 中定義腳本,使用
npm run來執行各種腳本命令,比如編譯、測試或部署項目。
常 用指令
npm init #初始化一個新的NPM項目,會生成 package.json 文件。
npm -v # 查看 NPM 版本
# npm install
npm install # 安裝項目的依賴
npm install <package> # 安裝指定的套件
npm install <package> -g # 全域安裝
npm install <package> --save # 安裝套件並寫入 package.json 的 "dependencies"
npm install <package> --save-dev # 安裝套件並寫入 package.json 的 "devDependencies"
npm install <package> --D # 同 --save-dev
npm uninstall <package> # 刪除專案裡的指定套件
npm list # 顯示安裝的 NPM 列表
npm update # 更新已安裝的 package
npm run <script> # 執行 package.json 中定義的腳本
Install npm package/node module
初始化專案:
npm init # 初始化專案
npm install # 安裝套件
- package.json:會新增一個
package.json檔案,來保存所有關於套件的相關配置檔資訊。 - package-lock.json:安裝第一個套件後會再多出一個
package-lock.json檔案來保存安裝紀錄。 - node_modules:所有下載的函式庫都會放在這個資料夾。
package.json 和 package.lock.json 個別用途
- package.json 是執行
npm init時所生成的,用來描述專案以及專案依賴 (dependency) 的相關套件訊息。 - package.lock.json 是執行
npm install時生成的,用來記錄當前狀態下實際安裝的各個 npm 套件具體來源和版號(可以用來鎖定版本)。
使用 npm install 時會安裝 package.lock.json 中指定的大版本號的最新小版本號:
{
"react": "^18.2.0", // 匹配 18.x.x 的最新版本
"react-dom": "~18.2.0", // 匹配 18.2.x 的最新版本
"react-refresh": "0.11.0" // 匹配 0.11.0 版本,不會更新最新版本
}
安裝環境
依照各個不同的環境,套件有可能會被安裝在不同的環境:
- dependencies - 執行環境
- devDependencies - 開發或測試環境
- optionalDependencies - 不一定在每個環境都能安裝
基本使用
npm install
根據專案的 package.json 中的依賴配置,安裝相應的依賴到專案中的 node_modules 資料夾。如果 node_modules 資料夾被刪除,可以運行 npm install 來重新下載所有套件。
因為套件的檔案很大,在上傳程式碼時通常不會將 node_modules 上傳(會使用 .gitignore)。如果要下載其他人的專案,或是不小心把 node_modules 檔案夾刪除,只要透過 npm install 就可以重新安裝 package.json 中提到的套件。
安裝套件 package
npm install <package_name>
npm i <package_name>
- 安裝一個特定的套件(如:lodash)
- 如果不指定版本號,NPM 會安裝該套件的最新穩定版本。
- 安裝完的套件會被添加到
node_modules資料夾,並且package.json中的dependencies會被更新。
安裝常用的 flag
-
-g, --global:全局安裝,package.json 中無資料,但仍然可以執行。全局安裝後就可以在系統的任 何地方使用該工具。通常用來安裝命令行工具。(資料夾位置:/usr/local/lib/node_modules) -
-S, --save或-P, --save-prod:將套件寫入dependencies。 -
-D, --save-dev:將套件寫入devDependencies。適合那些只在開發過程中使用的工具,如測試框架或編譯工具。 -
--save-peer:將套件寫入peerDependencies。 -
-O, --save-optional:將套件寫入optionalDependencies。 -
--no-save:避免將套件寫入dependencies。
在 npm v5.0.0 之後 --save 已經是預設指令(可以不用再加上 --save 或 --save-prod )。
套件屬性
- dependencies 相依套件:是指程式打包並發布後仍會需要用到的套件。(如
react、axios) - devDependencies 開發階段套件:是僅在開發時會用到,不會被 build 到最終的產物中的套件。(如建置工具
webpack、編譯工具babel、測試框架jest、程式碼格式化工具ESLint和prettier⋯等) - peerDependencies 對等套件:是用來指定對主項目依賴包的版本要求,但不會自動安裝。
- bundledDependencies 綑綁套件
- optionalDependencies 可選套件
執行 npm install --production 或是註明環境變數 NODE_ENV=production 時,只會下載 dependencies 中的套件。