未修改package.json且无新增依赖时,是否需要推送yarn.lock文件?
未修改package.json时是否需要提交yarn.lock
首先直接给出结论:非常有必要提交,核心原因如下:
- package.json 中声明的依赖基本都是版本范围规则,比如常见的
^1.2.0、~3.1.4写法,仅限定了依赖的大版本/小版本范围,允许安装符合规则的最新发布版本。如果没有 yarn.lock 做版本锁定,不同开发者、不同部署环境执行yarn install时,很可能拉取到不同的依赖版本,进而出现本地运行正常、线上环境报错的兼容性问题。 - 你测试时发现的「删除yarn.lock后重新生成内容不一致」的情况,恰恰体现了yarn.lock的核心价值:只要保留已有的yarn.lock文件,所有环境执行
yarn install都会严格按照文件中记录的所有依赖(包括子依赖)的精确版本拉取,完全不会自动升级符合版本范围的新发布版本,从根本上保证了所有环境依赖版本的一致性。 - 即便你没有手动修改package.json,也可能会因为执行
yarn upgrade这类命令升级部分依赖的小版本,导致yarn.lock内容更新,这种情况下也必须提交更新后的yarn.lock,否则其他协作者拉取代码后无法同步你做的版本调整。 - 二者的作用是互补而非重复:package.json 声明项目允许使用的依赖范围,yarn.lock 锁定项目实际运行的精确版本,二者缺一不可。
日常开发中建议不要随意删除yarn.lock,只有当你明确需要全量升级所有依赖到符合范围的最新版本时,才可以删除后重新生成。每次执行依赖调整操作后,直接把变更的yarn.lock和package.json一起提交即可。
内容的提问来源于stack exchange,提问作者David Nogueira
相关产品推荐
相关产品推荐

