透過 npm 安裝和指定版本、更新和指定版本、移除套件|Node Package Manager|node套件管理|npm|node_modules|package.json|package-lock.json|伊恩踩坑筆記

Ian BerLin / 伊恩踩坑筆記
4 min readJul 13, 2021

--

當你在安裝 node 時,會自動附帶 npm ,也就是 Node Package Manager 套件管理的縮寫。你可以透過 npm 指令安裝其他工程師所精心撰寫的優質套件,並將其套件依照個人需求編輯成你要的功能

透過 npm 安裝套件時,會自帶 package.json ,這個檔案是為了管理你的套件版本,並且方便 npm 安裝好所有該項目必要的套件

以下是介紹比較常用的指令,更詳細可以參考 npm 官方網站

安裝

假設我們要安裝 express 套件,在終端機中下指令

$ npm i express

i 是 install 的縮寫,install 作用相同
詳細說明與更多功能:https://www.npmjs.cn/cli/install/

安裝完成後你的項目根目錄底下就會有一個 node_modules 的資料夾,裡面是存放你各式套件的地方

除非有特殊需求,否則 node_modules 通常是不會建議跟著 git 到版控去,因為項目大小會過於龐大,也不便於更新套件版本。所以剛拿到項目要開始 Coding 前,都要先 npm i 安裝套件

移除

當我們不需要 express 套件了,在終端機中下指令

$ npm rm express

rm 是 uninstall 的縮寫,uninstall, remove, r, un, unlink 作用相同
詳細說明與更多功能:https://www.npmjs.cn/cli/uninstall/

該套件就會從你的 package.json 名單以及 node_modules 中被移除

安裝指定版本

你可以根據需求安裝你要的版本。假設 express 最新版本為 4.17.1 版,但我想要安裝 3.9.11 版時,在終端機中下指令

$ npm i express@3.9.11

前提是 express 有曾經發布 3.9.11,而不是數字隨便填哦!

更新指定版本

有時候我們不見得要更新到最新版本,可能只要某個版本就可以了,有幾個方式

  • package.json 中將該套件的版本輸入為你要的版本,然後在終端機中下指令
$ npm up <套件名稱>

save 意思是要將該版號同時也更新到 package.json 中,這樣其他工程師透過 npm i 安裝時才會安裝相同的套件版本,避免版本不同步。如果拿掉 save 就不會寫入 package.json

  • 直接安裝最新版本
$ npm up <套件名稱>@latest

什麼是 save 與 save-dev

$ npm i <套件名稱> --save
$ npm i <套件名稱> --save-dev
  • save:在開發、發佈時都需要依賴的套件
  • save-dev:在開發時才會依賴的套件,發佈後不需要使用

package.json 依賴項的版本控制符號

你可以直接在 package.json 指定該套件的版本安裝範圍或指定只在下一個版本之前的最新版本,例如

"dependencies": {
"dep1": "^1.1.1"
}

假設 dep1 有新的版本為 1.7.6 版,表示它會直接安裝 1.7.6 版,因為它大於 1.1.1 版

"dependencies": {  
"dep1": "~1.1.1"
}

假設 dep1 有新的版本為 1.7.6 版,但是在 1.1 版本時有幾個修正,因此在 1.2 版之前可能有 1.1.7 版,此時這樣設定的話,它就只會更新為 1.1.7 版而不會是 1.7.6 版

package-lock.json

package.json 只能鎖定大版本(版號第一位數字),除非有指定版本,否則都是安裝該大版號底下的最新版本,這會失去一些依賴項穩定性。然而,package-lock.json 的作用是確保大家的版本都必須一致,每次安裝時就會鎖定你安裝的那個版本

ING Design 応設計
https://www.theingdesign.com/

--

--

Ian BerLin / 伊恩踩坑筆記
Ian BerLin / 伊恩踩坑筆記

Written by Ian BerLin / 伊恩踩坑筆記

專門寫一些自己曾經踩過的坑,希望你沒踩過 / Web & BackEnd Developer • 台北 • theingdesign.com • IG: @ianakaberlin

No responses yet