是的,您应该将其签入,请参见从npm迁移
为什么是?
npm客户端将依赖项不确定地安装到node_modules
目录中。这意味着根据依赖项的安装顺序,node_modules目录的结构可能因人而异。这些差异可能导致我的机器上的工作需要很长时间才能找到错误。
Yarn通过使用锁定文件和一个确定性和可靠性的安装算法来解决这些关于版本控制和不确定性的问题。这些锁定文件将已安装的依赖项锁定到特定版本,并确保每次安装都在所有计算机的node_modules
中产生完全相同的文件结构。
取决于您的项目:
更详细的描述可以在这期GitHub中找到,纱线的创造者之一,例如。说:
json描述了原作者所希望的预期版本,而yarn.lock描述了给定应用程序的最后已知的良好配置。
将只使用顶级项目的yarn.lock
-文件。因此,除非一个项目将独立使用,而不是安装到另一个项目中,否则提交任何yarn.lock
-file ;-都没有用,而是始终由package.json
-file来传达项目所期望的依赖项的版本。
我看到这是两个独立的问题。让我两个都回答。
您是否应该将文件提交到回购中?
是的。正如Ckuijjer的回答中提到的,Migration Guide建议将此文件包含到repo中。继续读下去,了解你为什么需要这样做。
什么是yarn.lock
?
它是一个文件,存储项目的确切依赖版本以及每个包的校验和。这是YARN为您的依赖项提供一致性的方式。
要理解为什么需要这个文件,您首先需要理解原始NPM的package.json
背后的问题是什么。当您安装包时,NPM将存储一个依赖项的允许修订的范围,而不是特定的修订(semver)。NPM将尝试在指定范围内获取和更新依赖项的最新版本(即非中断补丁更新)。这种方法有两个问题。
>
依赖项作者可能会发布修补程序版本更新,但实际上会引入影响项目的重大更改。
两个在不同时间运行npm install
的开发人员可能会获得不同的依赖项集。这可能导致错误在两个完全相同的环境中无法再现。例如,这可能会导致CI服务器的构建稳定性问题。
而纱线则走可预测性最大的路线。它创建yarn.lock
文件来保存确切的依赖项版本。有了该文件,yarn将使用存储在yarn.lock
中的版本,而不是解析package.json
中的版本。此策略保证不会发生上述任何问题。
yarn.lock
类似于可以通过npm-shrinkwrap
命令创建的npm-shrinkwrap.json
。检查这个解释这两个文件之间差异的答案。