package-lock.json 相關

目前日常開發(fā)時,使用的包管理命令是cnpm。
但是cnpm是依賴 npminstall 的,特性之一是不會生成package-lock.json文件。

cnpm工具 相對于 npm 的特點:
1 速度快
2 node_modules中會生成更多的文件夾
3 不會生成 package-lock.json文件

package-lock.json

理想情況下,依賴包的版本是按照 semver規(guī)范 來的,然而實際上有的包可能沒有遵循這一原則。

主版本號:當你做了不兼容的 API 修改,
次版本號:當你做了向下兼容的功能性新增,
修訂號:當你做了向下兼容的問題修正。

有一種思路是為了迎合第三方庫自己的修正,package.json 中對于第三方庫的寫法如下:

"express": "^4.17.1",

這樣可以及時的將第三方庫的bugfix等在項目中體現(xiàn)。

另一種思路是為了保持版本穩(wěn)定不出錯,不自動更新第三方庫的版本,即使是修訂號的更新,這時需要一個文件來存儲“這一次”到底安裝了哪些依賴。
package-lock.json對依賴的描述如下:

       "@ant-design/colors": {
            "version": "3.2.2",
            "resolved": "http://r.cnpmjs.org/@ant-design/colors/download/@ant-design/colors-3.2.2.tgz",
            "integrity": "sha1-WtQ9YZ6RHzSI66wwPWBuZqhCOQM=",
            "requires": {
                "tinycolor2": "^1.4.1"
            }
        },

描述范圍包括版本、源地址、校驗hash和它自身的依賴。指定它們之后可以保證使用該文件安裝的副本是完全一樣的。

NPM 對 package-lock.json 的策略

1、npm 5.0.x 版本,不管package.json怎么變,npm i 時都會根據(jù)lock文件下載

package-lock.json file not updated after package.json file is changed · Issue #16866 · npm/npm

問題:明明手動改了package.json,卻不升級包

2、5.1.0版本后 npm install 會無視lock文件 去下載最新的npm

why is package-lock being ignored? · Issue #17979 · npm/npm

問題:lock文件失去意義,無法進行版本鎖定

3、5.4.2版本后
如果修改了package.json,且package.json和lock文件不同,在執(zhí)行npm install時npm會根據(jù)package中的版本號以及語義含義去下載最新的包,并更新至lock。
如果在執(zhí)行npm install時package.json和lock文件相同,則忽略更新版本。

NRM ( NPM registry manager)

一種可以使用npm工具安裝淘寶源的方法:

npm install nrm -g
nrm ls
nrm use cnpm

這種情況下速度較快,會生成package-lock.json文件。

Yarn

特點:

  • 引入 yarn.lock 文件來管理依賴版本問題,保證每次安裝都是一致的。
  • 緩存加并行下載保證了安裝速度

yarn.lock 與 package-lock.json 的主要區(qū)別在于 yarn.lock 中只有一層,而package-lock.json中是嵌套結構。

討論

1 是否使用lock方案
2 如果要使用lock方案,使用哪種方案?(nrm-taobao source/ yarn / npm / 其它)
3 為保證依賴穩(wěn)定,是否有其它注意事項?(如統(tǒng)一 node與npm 版本)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 本文參考:【原】npm 常用命令詳解從0開始發(fā)布一個無依賴、高質量的npm包Yarn 官網 上一篇文章 npm總結...
    雙面小Q閱讀 2,416評論 0 6
  • 1.需求由來 之前,在react項目開發(fā)過程中遇到一個問題,同一個項目第一次cnpm install的時候還可以啟...
    YINdevelop閱讀 29,715評論 1 26
  • 前端工程化代碼一般通過 包(package) (或者稱為 模塊(module)) 的方式來共享,因此你可以通過它...
    January丶緣閱讀 1,311評論 0 0
  • 大多數(shù)不成功的人之所以失敗,是因為他們首先看起來就不像個成功者。 形象到底是什么? 形象是一個人內在的素質、涵養(yǎng)、...
    BJ飛龍在天閱讀 1,781評論 0 0
  • 今天,研修進入第三天,依然以參觀考察為主。研修地點是常熟市塔前小學。 于我而言,今天的研修關鍵詞是“切...
    貓兒的愛閱讀 237評論 0 0

友情鏈接更多精彩內容