纱线形成纱线。执行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文件夹!)

只是硬币的另一面,我猜,但盲目地遵循这个教条会让你付出代价........

其他回答

我想是的,因为Yarn会自己制作纱线。锁文件: https://github.com/yarnpkg/yarn

它用于确定包依赖项解析。

是的,你应该签入它,参见从npm迁移

这是干什么用的? npm客户端非确定性地将依赖项安装到node_modules目录中。这意味着根据所安装依赖项的顺序,node_modules目录的结构可能因人而异。这些差异可能会导致我的机器上的bug,需要很长时间才能找到。

Yarn通过使用锁文件和确定可靠的安装算法解决了这些关于版本控制和不确定性的问题。这些锁文件将已安装的依赖项锁定到特定版本,并确保所有机器上的node_modules中的每次安装都产生完全相同的文件结构。

是的!纱线。Lock必须检入,以便任何安装依赖项的开发人员都能得到完全相同的输出!例如,使用npm[2016年10月可用],你可以在本地安装一个补丁版本(比如1.2.0),而新开发人员运行一个新的安装可能会得到一个不同的版本(1.2.1)。

你应该:

将其添加到存储库并提交 在本地和CI构建服务器上使用yarn install——frozen-lockfile和NOT yarn install作为默认值。

(我在yarn的问题跟踪器上打开了一个ticket,以使freeze -lockfile默认行为,参见#4147)。


注意不要在.yarnrc文件中设置freeze -lockfile标志,因为这会阻止你同步这个包。Json和yarn。锁文件。参见github上的相关纱线问题


纱线安装可能会使你的纱线发生变异。出乎意料地锁定,使可重复构建的纱线声明无效。你应该只使用yarn install来初始化yarn。锁定并更新它。

此外,特别是在较大的团队中,您可能会因为开发人员正在设置他们的本地项目而对yarn锁的更改产生很多噪音。

要了解更多信息,请阅读我对npm的package-lock的回答。Json在这里也适用。


最近在yarn安装的文档中也明确了这一点:

yarn install Install all the dependencies listed within package.json in the local node_modules folder. The yarn.lock file is utilized as follows: If yarn.lock is present and is enough to satisfy all the dependencies listed in package.json, the exact versions recorded in yarn.lock are installed, and yarn.lock will be unchanged. Yarn will not check for newer versions. If yarn.lock is absent, or is not enough to satisfy all the dependencies listed in package.json (for example, if you manually add a dependency to package.json), Yarn looks for the newest versions available that satisfy the constraints in package.json. The results are written to yarn.lock. If you want to ensure yarn.lock is not updated, use --frozen-lockfile.

是的,你应该承诺。了解更多关于纱线的知识。锁定文件,参考这里的官方文档