yarn.lock执行完后,Yarn会创建一个文件yarn install。
应该将其提交到存储库还是忽略?这是为了什么
Your yarn.lock file is auto-generated and should be handled entirely by Yarn. As you add/upgrade/remove dependencies with the Yarn CLI, it will automatically update your yarn.lock file.
yarn.lock执行完后,Yarn会创建一个文件yarn install。
应该将其提交到存储库还是忽略?这是为了什么
Your yarn.lock file is auto-generated and should be handled entirely by Yarn. As you add/upgrade/remove dependencies with the Yarn CLI, it will automatically update your yarn.lock file.
Answers:
是的,您应该签入它,请参阅从npm迁移
Yarn将在包的根目录中生成一个yarn.lock文件。您无需阅读或理解此文件-只需将其检入源代码管理即可。
取决于您的项目是什么:
可以在本GitHub问题中找到更详细的描述,例如Yarn的创建者之一。说:
package.json描述了原始作者所需的预期版本,而yarn.lock描述了给定应用程序的最新已知良好配置。
仅使用yarn.lock顶级项目的-file。因此,除非将一个项目单独使用并且不将其安装到另一个项目中,否则提交任何yarn.lock-file都没有用-而是,始终由package.json-file来传达项目期望的依赖版本。
我看到这是两个独立的问题。让我都回答。
您是否应该将文件提交到回购中?
是。如ckuijjer的回答中所述,建议在《迁移指南》中将此文件包含在回购中。继续阅读以了解为什么需要这样做。
什么yarn.lock啊
它是一个文件,用于存储项目的确切依赖版本以及每个软件包的校验和。这是yarn为您的依赖项提供一致性的方法。
要了解为什么需要此文件,您首先需要了解原始NPM背后的问题是什么package.json。在安装软件包时,NPM将存储允许的依赖项修订版本范围,而不是特定的修订版本(Semver)。NPM将尝试在指定范围内获取依赖关系的最新更新依赖关系的最新版本(即不间断的补丁更新)。这种方法有两个问题。
依赖性作者可能会发布补丁程序版本更新,而实际上却引入了会影响您项目的重大更改。
npm install在不同时间运行的两个开发人员可能会获得不同的依赖关系集。这可能会导致在两个完全相同的环境中无法再现错误。例如,这可能会导致CI服务器的构建稳定性问题。
另一方面,纱线采取了最大可预测性的路线。它创建yarn.lock文件来保存确切的依赖版本。将文件放置到位后,yarn将使用中存储的版本,yarn.lock而不是从中解析版本package.json。此策略保证上述所有问题均不会发生。
yarn.lock类似于npm-shrinkwrap.json可以通过npm shrinkwrap命令创建的内容。检查此答案,以解释这两个文件之间的差异。
yarn.lock更新,您知道为什么以及何时更新yarn吗?
yarn更新yarn.lock,包括在yarn install不更改package.json的情况下运行。yarn install --frozen-lockfile按照“ 为什么在Windows上运行yarn会更改yarn.lock(或通过配置它.yarnrc)”中的建议使用,似乎是最好的选择。
package-lock.json和npm ci。该工作流程类似于yarn yarn.lock和yarn install --frozen-lockfile。
我猜是的,因为Yarn版本了它自己的yarn.lock文件:https : //github.com/yarnpkg/yarn
它用于确定性包依赖关系解析。
你应该:
yarn install --frozen-lockfile和NOT yarn install作为默认值。(我在yarn的问题跟踪器上打开了一个票证,以使冻结的锁文件成为默认行为,请参阅#4147)。
注意不要frozen-lockfile在.yarnrc文件中设置标志,因为那样会阻止您同步package.json和yarn.lock文件。在github上查看相关的yarn问题
yarn install可能会意外更改您的yarn.lock,从而使可重复构建的纱线声明无效。您应该只用于yarn install初始化yarn.lock并对其进行更新。
另外,特别是 在较大的团队中,可能仅因为开发人员正在设置其本地项目,在纱线锁周围的变化中会有很多杂音。
有关更多信息,请继续阅读 我有关npm的package-lock.json的答案,这也适用于此。
最近在纱线安装文档中也对此进行了明确说明:
yarn install将package.json中列出的所有依赖项安装在本地node_modules文件夹中。
的
yarn.lock文件的用途如下:
- 如果存在yarn.lock并足以满足package.json中列出的所有依赖关系,则会安装yarn.lock中记录的确切版本,并且yarn.lock将保持不变。Yarn不会检查较新的版本。
- 如果不存在yarn.lock或不足以满足package.json中列出的所有依赖项(例如,如果您手动将依赖项添加到package.json中),则Yarn会寻找满足package约束的最新可用版本.json。结果被写入yarn.lock。
如果要确保未更新yarn.lock,请使用
--frozen-lockfile.
--frozen-lockfile的,如果有人手动更新的package.json没有随后运行yarn install和提交更新。因此,CI可能希望使用该标志,但开发人员不应使用该标志,因为它隐藏了问题。
yarn.lock引入的意外更改的文件yarn install,我会遇到更大的麻烦,要么膨胀请求,要么造成不必要的合并冲突,要么破坏一个中断的库。(仅因为库使用semvar,并不意味着补丁/次要更新不会破坏您的应用-我去过那里)。我认为更新yarn.lock只应该是一个手动步骤,这就是我甚至在我的开发机器上都依赖yarn install --frozen-lockfile(以及npm ci依赖npm项目)的原因,因为它可靠且确定。
yarn.lock意外更新的问题(自2016年10月发布以来一直在使用)。一直是用户手动执行某项操作或糟糕的安装后脚本。这就是我比NPM更喜欢Yarn的原因(NPM会随时更新所有内容)。我想我很幸运自己没有遇到那些问题。
根据我的经验,我会说是的,我们应该提交yarn.lock文件。这将确保当其他人使用您的项目时,他们将获得与您的项目预期相同的依赖关系。
当您运行yarn或yarn add时,Yarn将在程序包的根目录中生成一个yarn.lock文件。您无需阅读或理解此文件-只需将其检入源代码管理即可。当其他人开始使用Yarn而不是npm时,yarn.lock文件将确保他们获得与您完全相同的依赖项。
有一种争论可能是,我们可以通过替换^为实现它--。是的,我们可以,但是总的来说,我们已经看到大多数npm软件包都带有^符号,并且我们必须手动更改符号以确保静态依赖版本。yarn.lock它会以编程方式确保您的正确版本。
就像埃里克·埃利奥特(Eric Elliott)在这里说的
不要.gitignore yarn.lock。它可以确保确定性的依赖关系解析,从而避免“在我的机器上工作”的错误。
是的,您应该提交它。有关yarn.lock文件的更多信息,请参见此处的官方文档
是! yarn.lock必须签入,以便任何安装依赖项的开发人员都能获得完全相同的输出!例如,使用 npm [2016年10月可用],您可以在patch本地安装一个版本(例如1.2.0),而运行全新install版本的新开发人员可能会使用其他版本(1.2.1)。
--save-exact在使用npm时使用,则可以实现相同的行为。
yarn upgrade命令起作用的地方。此命令将升级所有软件包并重新创建锁定文件。因此,例如,如果您要将应用程序部署到生产环境中并且需要安装依赖项,则它将基于从存储库中提取的锁定文件进行安装。yarn upgrade除非明确要更改依赖关系信息(从而提交新的锁定文件),否则切勿运行。
yarn install不会确保相同的版本。只做yarn install --frozen-lockfile。