纱线形成纱线。执行yarn安装后锁定文件。
这应该提交到存储库还是忽略?这是干什么用的?
纱线形成纱线。执行yarn安装后锁定文件。
这应该提交到存储库还是忽略?这是干什么用的?
当前回答
不是要唱反调,但是我已经慢慢地(在过去的几年里)意识到你不应该提交锁文件。
我知道他们所有的文件都说你应该这么做。但这又能有什么用呢!在我看来,弊远大于利。
基本上,我花了无数小时调试问题,最终通过删除锁文件解决了这些问题。例如,锁文件可以包含有关使用哪个包注册中心的信息,而在不同用户访问不同注册中心的企业环境中,这将导致灾难。
Additionally, the lock files can really mess up your dependency tree. Because yarn and npm create a complex tree and keep external modules of different versions in different places (e.g. in the node_modules folder within a module in the top node_modules folder of your app), if you update dependencies frequently, it can create a real mess. Again, I have spent tons of time trying to figure out what an old version of a module was still being used in a dependency wherein the module version had been updated, only to find that deleting the lock file and the node_modules folder solved all the hard-to-diagnose problems.
我现在甚至有shell别名,在运行yarn或npm之前删除锁文件(有时也删除node_modules文件夹!)
只是硬币的另一面,我猜,但盲目地遵循这个教条会让你付出代价........
其他回答
取决于你的项目是什么:
你的项目是一个应用程序吗?然后:是的 你的项目是图书馆吗?如果有:没有
更详细的描述可以在这个GitHub问题中找到Yarn的创建者之一。说:
包。Json描述了原作者所期望的版本,而yarn。Lock描述给定应用程序的最后一个已知良好配置。
只有纱线。将使用顶级项目的锁文件。因此,除非一个项目将被单独使用,而不是安装到另一个项目中,否则提交任何yarn都是没有用的。锁定文件-相反,它将始终取决于包。json文件来传达项目期望的依赖项的版本。
是的!纱线。Lock必须检入,以便任何安装依赖项的开发人员都能得到完全相同的输出!例如,使用npm[2016年10月可用],你可以在本地安装一个补丁版本(比如1.2.0),而新开发人员运行一个新的安装可能会得到一个不同的版本(1.2.1)。
根据我的经验,我会说,是的,我们应该做纱线。锁文件。这将确保,当其他人使用您的项目时,他们将获得与您的项目预期相同的依赖项。
来自医生
当您运行纱线或纱线添加时,yarn将生成一个纱线。在包的根目录中锁定文件。您不需要阅读或理解此文件—只需将其签入源代码控制。当其他人开始使用Yarn而不是npm时,Yarn。锁文件将确保他们得到完全相同的依赖,因为你有。
一种说法是,我们可以通过用——替换^来实现。是的,我们可以,但一般来说,我们已经看到大多数npm包都带有^符号,我们必须手动更改符号以确保静态依赖版本。但如果你用纱线。锁定它将以编程方式确保您的版本正确。
正如埃里克·艾略特所说
不要。gitignore yarn.lock。它的存在是为了确保确定性依赖项解析,以避免“在我的机器上工作”的错误。
不是要唱反调,但是我已经慢慢地(在过去的几年里)意识到你不应该提交锁文件。
我知道他们所有的文件都说你应该这么做。但这又能有什么用呢!在我看来,弊远大于利。
基本上,我花了无数小时调试问题,最终通过删除锁文件解决了这些问题。例如,锁文件可以包含有关使用哪个包注册中心的信息,而在不同用户访问不同注册中心的企业环境中,这将导致灾难。
Additionally, the lock files can really mess up your dependency tree. Because yarn and npm create a complex tree and keep external modules of different versions in different places (e.g. in the node_modules folder within a module in the top node_modules folder of your app), if you update dependencies frequently, it can create a real mess. Again, I have spent tons of time trying to figure out what an old version of a module was still being used in a dependency wherein the module version had been updated, only to find that deleting the lock file and the node_modules folder solved all the hard-to-diagnose problems.
我现在甚至有shell别名,在运行yarn或npm之前删除锁文件(有时也删除node_modules文件夹!)
只是硬币的另一面,我猜,但盲目地遵循这个教条会让你付出代价........
我看这是两个独立的问题。我来回答两个问题。
你应该把文件提交到回购吗?
是的。正如ckuijjer的回答中提到的,在迁移指南中建议将该文件包含到repo中。往下读,你就会明白为什么你需要这么做。
什么是yarn.lock?
它是一个存储项目的确切依赖项版本以及每个包的校验和的文件。这是yarn为依赖项提供一致性的方法。
要理解为什么需要这个文件,你首先需要理解原始NPM的package.json背后的问题。当你安装这个包时,NPM将存储一个依赖的允许修订范围,而不是一个特定的修订(semver)。NPM将尝试在指定范围内获取更新依赖项的最新版本(即非破坏性补丁更新)。这种方法有两个问题。
依赖项作者可能会发布补丁版本更新,而实际上引入了一个会影响您的项目的破坏性更改。 两个在不同时间运行npm install的开发人员可能会得到不同的依赖集。这可能会导致一个bug在两个完全相同的环境中无法重现。例如,这可能会导致CI服务器的构建稳定性问题。
另一方面,纱线采用了最大可预测性的路线。它能产生纱线。锁定文件以保存确切的依赖项版本。该文件到位后,yarn将使用存储在yarn中的版本。锁定,而不是从package.json解析版本。这个策略保证上面描述的问题不会发生。
纱线。锁类似于npm-shrinkwrap。可以通过NPM shrinkwrap命令创建的Json。检查解释这两个文件之间差异的答案。