日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

更新json文件_忽略packagelock.json?

發布時間:2024/1/23 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 更新json文件_忽略packagelock.json? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

近期經常遇到包版本導致的問題,之前使用過 package-lock.json 來約束版本,但總是導致一些問題或者沖突,沒有多研究原因,直接在 .gitignore 把它忽略了,當時倒是沒啥問題,隨著一些依賴包的更新,問題出現了。。

項目中 package.json 使用了框架默認的,包版本規則基本都是^開頭,所以每次 npm install 都會根據版本規則安裝最新的包,不可避免出現依賴包兼容問題。

忽略lock文件會導致包自動更新問題,不忽略會導致沖突或者意外報錯,怎么辦?

語義化版本控制

版本號由三部分組成:主版本號、次版本號、補丁版本號。變更不同的版本號,代表不同的意義

  • 主版本號(major):新的架構調整,不兼容老版本
  • 次版本號(minor):新增功能,兼容老版本
  • 補丁版本號(patch):修復bug,兼容老版本
?"dependencies":?{
????"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

參考資料

  • npm install https://docs.npmjs.com/cli/v6/commands/npm-install
  • npm install實現原理 https://www.zhihu.com/question/66629910
  • npm ci https://www.npmjs.cn/cli/ci/
  • 你不知道的npm https://zhuanlan.zhihu.com/p/102546577
  • 剖析npm包的管理機制 https://blog.csdn.net/azl397985856/article/details/103982369
  • npm模塊安裝機制 http://www.ruanyifeng.com/blog/2016/01/npm-install.html
  • 關于忽略package-lock的討論 https://github.com/npm/npm/issues/17979
  • 總結

    以上是生活随笔為你收集整理的更新json文件_忽略packagelock.json?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。