遼寧省網(wǎng)站備案注銷百度網(wǎng)站統(tǒng)計
1. Node 與 Npm 版本對應(yīng)
這是一個必知必會的問題,尤其是對于維護那些老掉牙、一坨坨、非常大的有著長期歷史的老破大工程。
1.1. package-lock.json 版本
首先你要會看項目的 package-lock.json 文件中的 lockfileVersion 版本號,這對于 NPM 安裝來說至關(guān)重要。
{ lockfileVersion: 1 }
對應(yīng) Node 版本: 8, 10, 12, 14{ lockfileVersion: 2 }
對應(yīng) Node 版本: 15, 16, 17 - 開發(fā)界約定基數(shù)版本為非穩(wěn)定{ lockfileVersion: 3 }
對應(yīng) Node 版本: 18, 20, 22
1.2. package-lock.json 說明
- 你可能會問為什么版本對不上也能構(gòu)建成功,那要是完全的不兼容,估計 NPM 要被人噴死了。兼容性肯定是存在的,但是兼容到什么程度完全取決于你的項目依賴包“有沒有坑”。
- 其次你可能還想知道 package-lock.json 為什么這么重要,這里有個決定性的東西非常關(guān)鍵。先想想一個包如何保障在每臺機器上安裝絕對的相同!
NPM 是通過 lock 文件中記錄的 sha512
散列值(hash)確定這個包是否是預(yù)期的包。
2. 如何切換 Node 版本
2.1. package.json 中的 deploy
項目的 package.json 中的 deploy 字段為發(fā)布系統(tǒng)識別配置,除了 node 版本切換,還支持包管理器切換、項目腳本鉤子能力(beta.1 階段)
{"name": "AppName","deploy": {"node": "18.20.5", // 指定 node 版本"packager": "pnpm@9.15.0" // 指定包管理器}
}
3. 常見問題
3.1. node14
升級 node16
常見問題
- 依賴沖突問題;node14 以前沒有 "依賴版本配對校驗" 功能,對應(yīng)著 package.json 中的 👉🏻 peerDependencies ,升級到 node16 后問題暴露,構(gòu)建失敗!
- 對應(yīng)的解決方案有兩個:
-
- 根據(jù) NPM 安裝日志解決依賴版本沖突;比較直觀的解決辦法。
- 添加
legacy-peer-deps=true
到項目根目錄中的.npmrc
文件中;比較暴力(保守)的解決辦法 -- 由于開發(fā)同學(xué)也吃不準(zhǔn)如何“深入解決”依賴版本關(guān)系,切升級成本大,同時會帶來新的風(fēng)險(改動即風(fēng)險),相當(dāng)于以為 node14 的策略運行安裝機制!