別再盲目運行 npm install 了
這場景大家都經歷過:項目突然出錯,構建失敗,緊急關頭就手賤敲下:
npm install
仿佛這是呼喚 NPM 神靈賜予穩定的古老儀式。
但事實是:盲目執行 npm install,尤其是沒關注到底安裝了什么,往往會帶來更多麻煩,而非解決問題。
下面講講正確的做法,以及如何有效管控依賴混亂。
先用 npm ci(真的,認真的)
如果項目中存在 package-lock.json
文件,務必首選:
npm ci
原因有三:
- 它嚴格安裝鎖文件中指定的版本,絕無意外。
- 速度比
npm install
快。 - 如果
package-lock.json
和package.json
不匹配,它會報錯,這正是保護機制。
這對持續集成(CI)環境尤其重要,日常本地開發時也適用,保證干凈的安裝環境。
?? 經驗法則:
有鎖文件且不新增依賴時,優先用
npm ci
。
不要相信 node_modules,相信鎖文件
假如你本地構建無誤,生產環境卻崩潰,原因很可能是 npm install
根據語義版本規則(semver)在不同時間解析依賴版本不同。
舉例:package.json
中 "some-lib": "^1.2.0"
,但實際安裝的版本因環境差異而異。
不提交 package-lock.json
,就是在玩“語義版本賭局”。
安裝前先審計依賴!
準備新增依賴或懷疑某包惹事,先用:
npm outdated
看看隱藏了哪些過時或潛在問題的包。
有時候,是某個間接依賴偷偷升級了(比如 lodash v5 alpha 版)。
加依賴前,還可以查查最新版本:
npm info package-name
此外,務必檢查倉庫維護狀況:
- 維護活躍嗎?
- 最近一次提交是幾時?2020年?慎重考慮。
額外推薦:npx npm-why
想知道某個神秘依賴為什么在 node_modules
里?
執行:
npx npm-why package-name
它會告訴你哪個包引入了它。
非常適合想瘦身包體或清理遺留依賴時用。
總結(務實為王)
- 使用
npm ci
替代npm install
,實現干凈且可預測的安裝。 - 始終提交并維護
package-lock.json
。 - 安裝前后用工具審計依賴,避免隱患。
- 善用
npm-why
、npm outdated
等工具掌控依賴狀態。