它们是啥
前端项目中使用 npm 安装依赖后产生的锁文件,它们详细记录了项目中依赖的第三方包关系,精确到依赖的依赖的确切版本。
为什么会有锁
MAJOR 版本:发布了不兼容的 API 修改;
MINOR 版本:发布了向下兼容的功能性新增;
PATCH 版本:发布了向下兼容的问题修正。
举个例子 👇
- ~1.2.3:patch 版本,修复一些 bug,覆盖范围 1.2.x
- ^1.2.3:minor 版本,新增了一些功能,但是不影响之前的功能,覆盖范围 1.x.x
npm 提供了语义化的版本记录,但是还是会存在问题:
- 开发者没有遵守 npm 包发布规范,该 patch 的版本出现了不兼容的功能
- 版本漂移:实际安装依赖时、或者构建时依赖会相比最开始开发时高一些,可能造成表现不一致
使用建议
使用锁
- 定期升级项目依赖,确保依赖包上游不会有 bug 影响到项目
- 升级后严格测试,确保最新的依赖不会对已有代码产生副作用
- 如果是小项目,为了规避一些不确定因素,可以锁定版本
不用锁
- 确保你的依赖是可靠的
- 业务优先的情况,可以保证快速修复 bug
- 自动升级后,不会存在更新依赖出现较大差异的情况