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






























