关于package-lock, 你知道多少?

说到package-lock.json, 大家应该知道当执行npm install之后会产生, 实际上凡是当npm执行涉及到node_modulespackage.json改动的操作时, package-lock.json都会发生改变, 其具体描述了当前依赖树是什么样子及每个依赖锁定的版本

package-lock.json是在npm v5.x.x开始有的, 在平时的项目中,笔者看到很多人都是直接将package-lock.json删除, 重新安装 忽略了其作用,其实它可以帮助我们更好的做好依赖管理,来看看文档里列举的几项优点

  • Describe a single representation of a dependency tree such that teammates, deployments, and continuous integration are guaranteed to install exactly the same dependencies.
  • Provide a facility for users to “time-travel” to previous states of node_modules without having to commit the directory itself.
  • To facilitate greater visibility of tree changes through readable source control diffs.
  • And optimize the installation process by allowing npm to skip repeated metadata resolutions for previously-installed packages.

上面大概的意思是 我们能够通过package-lock.json保证在CI和部署这样的场景下保证依赖的一致性, 同时更好的做好依赖的版本控制, 而且它还可以起到优化依赖安装, 提高安装速度

抛开其他几点不说,我们先说一下CI和部署这样的场景下保证依赖的一致性, 笔者认为这点是package-lock.json给我们带来的最大好处

场景

笔者曾经遇到一个这样的场景, 之前安装过的第三方依赖vue-property-decorator,在本地开发时是正常工作的,但是当部署到线上时, 实际表现不一致, 排查下发现是线上环境与开发环境版本不一致导致的, 最后通过npm ci配合package-lock.json解决了这个问题.

当然你也可以通过写死版本号的方式来做到这样,但是既然有了package-lock.json这样更好的解决方案,为何不用呢?

注意

需要注意的是 当package.json的依赖有更新的版本时, 安装依赖的版本会被更新, 所以为确保在CI和部署这样的场景下保证依赖的一致性,请使用npm ci进行相关依赖, 这个命令会完全按照package-lock.json锁定的版本进行安装

相关参考

npm install与package-lock.json相关issue
npmjs docs
everything-you-wanted-to-know-about-package-lock-json

你可能感兴趣的:(关于package-lock, 你知道多少?)