它们是啥

前端项目中使用 npm 安装依赖后产生的锁文件,它们详细记录了项目中依赖的第三方包关系,精确到依赖的依赖的确切版本。

为什么会有锁

image.png

MAJOR 版本:发布了不兼容的 API 修改;
MINOR 版本:发布了向下兼容的功能性新增;
PATCH 版本:发布了向下兼容的问题修正。

举个例子 👇

  • ~1.2.3:patch 版本,修复一些 bug,覆盖范围 1.2.x
  • ^1.2.3:minor 版本,新增了一些功能,但是不影响之前的功能,覆盖范围 1.x.x

npm 提供了语义化的版本记录,但是还是会存在问题:

  • 开发者没有遵守 npm 包发布规范,该 patch 的版本出现了不兼容的功能
  • 版本漂移:实际安装依赖时、或者构建时依赖会相比最开始开发时高一些,可能造成表现不一致

使用建议

使用锁

  • 定期升级项目依赖,确保依赖包上游不会有 bug 影响到项目
  • 升级后严格测试,确保最新的依赖不会对已有代码产生副作用
  • 如果是小项目,为了规避一些不确定因素,可以锁定版本

不用锁

  • 确保你的依赖是可靠的
  • 业务优先的情况,可以保证快速修复 bug
  • 自动升级后,不会存在更新依赖出现较大差异的情况

Ref