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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值