大多數情況下遵循這種版本號規則的依賴包都沒問題, 但是npm是開源的世界, 并不是所有的都嚴格遵循這種規則, 所以會出現上述的問題;
為什么需要package鎖
有如下幾個可能原因, 在某些情況下, package.json是無法保證每個人自己電腦上執行的 npm install 后安裝的依賴版本都是一樣的
1.如果package.json中記錄的依賴包的版本是一個版本范圍, 一旦執行npm i 會導致這個包更新到最新版本
2.就算你依賴了一個固定版本的包(如A 1.1.1), 但你依賴的包A可能依賴其他的包B,而A在聲明依賴時可能也使用了semser命名, 如 ^1.2.3, 如果包B release 了新版, 也會導致包B會安裝到更新版本
3.不同人使用的npm程序的版本不同
如果依賴包的版本不一致, 會導致開發環境和生產環境產品不一致的行為; 或者導致不同團隊成員之前也產品環境差異
如何解決包版本不一致的情況
1.npm 使用package-lock.json文件來解決這個問題
執行npm install會自動生成package.json文件, 只要執行普通的安裝, 更新等可能會修改 package.json的npm命令, 都會自動同步修改package-lock.json文件
npm install xxx npm rm xxx npm update xxx
2.npm 還支持npm-shrinkwrap.json, 和package-lock.json功能完全一樣
執行 npm shrinkwrap
來生成npm-shrinkwrap.json
此命令將根據 package-lock.json 文件創建一個新的或覆蓋已有的 npm-shrinkwrap.json 文件。 此命令創建和更新的文件將優先于任何其他現有或將有的 package-lock.json 文件。
3.使用yarn
使用yarn主要有一下優點
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com