更新json文件_忽略packagelock.json?
背景
近期經常遇到包版本導致的問題,之前使用過 package-lock.json 來約束版本,但總是導致一些問題或者沖突,沒有多研究原因,直接在 .gitignore 把它忽略了,當時倒是沒啥問題,隨著一些依賴包的更新,問題出現了。。
項目中 package.json 使用了框架默認的,包版本規則基本都是^開頭,所以每次 npm install 都會根據版本規則安裝最新的包,不可避免出現依賴包兼容問題。
忽略lock文件會導致包自動更新問題,不忽略會導致沖突或者意外報錯,怎么辦?
語義化版本控制
版本號由三部分組成:主版本號、次版本號、補丁版本號。變更不同的版本號,代表不同的意義
- 主版本號(major):新的架構調整,不兼容老版本
- 次版本號(minor):新增功能,兼容老版本
- 補丁版本號(patch):修復bug,兼容老版本
????"signale":?"1.4.0",?//?固定版本號
????"figlet":?"*",?//?任意版本(>=0.0.0)
??????
????//?匹配主要版本(>=16.0.0?<17.0.0)?兩種寫法效果一樣
????"react":?"16.x",?
????"react":?"^16.3.0",
??????
????//?匹配主要版本和次要版本(>=16.3.0?<16.4.0)?兩種寫法效果一樣
????"react-dom":?"16.3.x",
????"react-dom":?"^~16.3.0"
}
凡事都有意外,當主版本號為 0 的情況,會被認為是一個不穩定版本,情況與上面不同:
主版本號和次版本號都為 0
- ^0.0.z、~0.0.z 都被當作固定版本,安裝依賴時均不會發生變化。
主版本號為 0
- ^0.y.z 表現和 ~0.y.z 相同,只保持修訂號為最新版本。
1.0.0 的版本號用于界定公共 API。當你的軟件發布到了正式環境,或者有穩定的API時,就可以發布1.0.0版本了。所以,當你決定對外部發布一個正式版本的npm包時,把它的版本標為1.0.0。
package-lock.json
由來
為了解決 npm install 安裝包版本的不確定性,從npm5.0.0開始,使用 npm install 會自動創建一個package-lock.json文件,而且文件比較大,單位為KB/MB,保存了 package.json 的依賴項,和 node_modules 一一對應,用于鎖定包的具體來源和版本號,以保證其他伙伴安裝時依賴能保持一致,下圖就是部分對應關系的展示。
對應關系屬性說明
- version 這個包當前安裝在 node_modules 中的版本
- resolved 安裝來源
- integrity 包 hash 值,基于 Subresource Integrity 來驗證已安裝的軟件包是否被改動過、是否已失效
- requires 子依賴的依賴,與子依賴的 package.json 中 dependencies的依賴項相同
- dependencies 是一個對象,對象和 node_modules 中的包結構一一對應
不同版本的區別
5.0.x 增加了版本鎖定,每次 npm install 完全依賴 package-lock.json 文件安裝,**即使修改了package.json,也不安裝新的依賴。**so 新的問題出現了,如果我就是要更新呢,無解。刪了 package-lock.json ,重新安裝,這樣就失去了lock的意義。
5.1.0 之后的版本,修改 package.json 會更新 package-lock.json 。執行 npm install ,如果有依賴更新,也會更新到 package-lock.json
5.7.0 之后 新增了ci命令 npm ci 會根據 package-lock.json 安裝包
node版本與npm版本
node自帶npm,雖然可以升級,但是一般都使用了自帶的,對應的版本關系了解一下
node自帶npm版本npm install 常見問題
遇到一些安裝報錯等問題,通常搜索到幾個命令,使用后解決就沒有再關注,后續又遇到了類似問題。。
不同node版本安裝的,運行報錯
比如node8.0安裝的包,切到node10.0運行提示版本問題,要么切換node版本,要么刪除node_modules重裝
報錯 integrity checksum failed when using sha512: wanted sha512 xxx
報錯截圖通常刪除 package-lock.json 重裝,或者使用cnpm(lock文件對cnpm無效)
這樣就破壞了鎖定版本的目的,安裝了版本不確定的依賴包,先看下為什么會報錯
package-lock.json 中的版本2.7.14正確的sha521從上面兩個圖可以明顯看出,就是因為sha512不一致導致的錯誤
解決方案:為了不影響 package-lock.json 鎖定其他包的版本,先使用npm install element@version -S 單獨安裝這個包,這時 ?package-lock.json 也會更新,再執行 npm ci 安裝其他依賴包
手動更新 package.json 卻安裝了非指定版本
比如把"umi": "^3.0.10" 手動改為"umi": "^3.0.11",結果實際安裝了當前小版本最新的 3.2.27,因為修改后的語義就是要安裝 4.0.0 以下的版本,除非改為 "umi": "3.0.11" 才會安裝指定版本
有 package-lock.json 文件 使用 npm install 為啥更新了 package-lock.json 文件
5.1.x之后的版本是這樣,npm install 總是先檢查是否有依賴更新,有的話,安裝更新,寫入 package-lock.json。
即使你的項目直接固定了版本,但是依賴的依賴無法固定,還是會出現這種現象。
如果只想使用 package-lock.json 來安裝且不更新依賴,npm使用5.7.1以上版本,使用 npm ci
結論
不建議忽略和刪除操作
npm 建議使用5.7.1以上版本
安裝包習慣從npm install 改為 npm ci
需要lock文件 沒有 package-lock.json 會報錯
更新包再使用npm install packageName
參考資料
總結
以上是生活随笔為你收集整理的更新json文件_忽略packagelock.json?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 封装_Python 面向对
- 下一篇: pytorch打印模型参数_Pytorc