npm中package-lock.json存在的價值


介紹

如果把npm更新到了5以上,默認就會有package-lock.json。很多時候我們直接把它ignore或直接從項目中刪除,然後直接從npm install來安裝依賴。那麼坑就此埋下了,尤其是在多人協作的時候,很有可能出現的情況是依賴報錯了。那麼這個文件存在的目的是什麼呢?


總結

先給出結論:

  1. package-lock.json是^5.x.x自帶生成的
  2. 你應該使用package-lock來確保依賴的兼容性
  3. 在使用git等源碼管理系統的時候,應該把這個文件帶上
  4. 不要只爲了npm install而把package-lock給刪了

目的

package-lock的引入是爲了避免因爲依賴更新導致npm install不同的結果。舉例來說,我們安裝express:npm install express --save,最新版本是是4.15.4,而在package.json中是這樣寫的

"express": "^4.15.4"

其中^表示的是最低版本,也就是npm默認後面版本兼容前面的。但結果往往並不盡然。比如後面修復了bug,發佈小版本4.15.5,那麼其他人獲取代碼然後安裝的就是4.15.5,這就導致同一套package.json,最後安裝的包可能不一樣,而這有可能在後期帶來意想不到的兼容性問題。


package-lock格式

截取一段來看下,發現其中包含了具體的版本,哈希鹽值integrity,因此有效保證了所有人,任何時間安裝的版本都是一致的。

"express": {
      "version": "4.15.4",
      "resolved": "https://registry.npmjs.org/express/-/express-4.15.4.tgz",
      "integrity": "sha1-Ay4iU0ic+PzgJma+yj0R7XotrtE=",
      "requires": {
        "accepts": "1.3.3",
        "array-flatten": "1.1.1",
        "content-disposition": "0.5.2",
        "content-type": "1.0.2",
        "cookie": "0.3.1",
        "cookie-signature": "1.0.6",
        "debug": "2.6.8",
        "depd": "1.1.1",
        "encodeurl": "1.0.1",
        "escape-html": "1.0.3",
        "etag": "1.8.0",
        "finalhandler": "1.0.4",
        "fresh": "0.5.0",
        "merge-descriptors": "1.0.1",
        "methods": "1.1.2",
        "on-finished": "2.3.0",
        "parseurl": "1.3.1",
        "path-to-regexp": "0.1.7",
        "proxy-addr": "1.1.5",
        "qs": "6.5.0",
        "range-parser": "1.2.0",
        "send": "0.15.4",
        "serve-static": "1.12.4",
        "setprototypeof": "1.0.3",
        "statuses": "1.3.1",
        "type-is": "1.6.15",
        "utils-merge": "1.0.0",
        "vary": "1.1.1"
      }
    },

附錄

更多請參考原文鏈接:https://medium.com/coinmonks/everything-you-wanted-to-know-about-package-lock-json-b81911aa8ab8

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章