使用 yarn berry 时将 .yarn 目录提交到 git

mze*_*ler 8 yarnpkg yarnpkg-v2

在下一个版本的纱线(“浆果”)中,手册指出应该提交创建的名为 的目录.yarn,但是如果您使用纱线的多版本设置,该目录包含的文件releases/yarn-berry.js似乎是整个浆果版本的yarn,占用超过2MB的磁盘空间。

这似乎真的是错误的 - 为什么我要向 git 提交一个包管理器,只是为了让它工作?

小智 17

Yarn 开发人员在安装文档的“关于全局安装”部分中解释了这样做的基本原理:

在系统中使用单个包管理器一直是一个问题。为了保持稳定,安装需要在不同环境中使用相同的包管理器版本运行,否则我们可能会在版本之间引入意外的重大更改 - 毕竟,这就是为什么首先引入锁文件概念的原因!从某种意义上说,Yarn 是您的第一个项目依赖项,因此“锁定它”也应该有意义。

一旦 Yarn 被跟踪并“锁定”为每个项目的依赖项,如果您遵循 Yarn 2 的零安装策略(此处解释了其基本原理),它最终会提交到 Git 。

我是 Yarn 的新手,但我花了数年时间从事 DevOps 工作,帮助开发人员弄清楚为什么他们的代码有时可以在团队一半的笔记本电脑上正确构建,但不能在另一半上正确构建,或者在继续时突然开始无法在 CI 中构建去其他地方工作。鉴于 Node 不断升级,试图保持npm公司中每台计算机和代码库的版本一致基本上是不可能的,但将每个项目锁定到其自己的特定 Yarn 版本——通过致力于 Git,可以保证这一点在该项目的每次结账中都可用——解决了这个问题。

  • 我发现这种默认方法真的很奇怪。我不希望纱线成为我的项目的一部分,我宁愿它是一个系统依赖项。为什么yarn不能将版本写入yarn.lock,然后自动尝试使用该版本(如果可用)或抛出错误/警告(如果不可用)。 (27认同)

Vik*_*nko 6

我为那些不想将 Yarn 2+ 二进制文件提交到 git 存储库中的人编写了一个小工具,同时仍然受益于每个项目坚持 Yarn 版本。如果您已经在项目中配置了 Yarn 2+ 只是不想提交它,您可以运行:

yarn dlx pinyarn

此命令将生成.pinyarn.js(4KB),您应该提交它。.pinyarn.js将包含从官方 Yarn Berry GitHub 存储库下载 Yarn 2+ 及其插件的 URL。.pinyarn.js如果尚未下载,将从这些 URL 下载二进制文件和插件。

您还可以通过以下方式指定您想要的 Yarn 2+ 版本:

yarn dlx pinyarn 3- 最新发布的 Yarn 3 版本,或者

yarn dlx pinyarn 2.2.2- 版本 2.2.2,或

yarn dlx master- 来自最新来源的版本,或

yarn dlx 1638- 来自 Pull Request 1638 的版本

GitHub 上的工具pinyarn存储库: https ://github.com/sysgears/pinyarn

  • 很高兴您正在做一些事情,但是在弄清楚为什么纱线首先需要这样做之前,我会等待使用您的解决方法。 (2认同)

小智 5

官方文档提到了应该忽略什么以及应该提交什么。我认为它可以解决这个问题。 https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored

  • 我看到这个页面,它说你应该提交yarn2代码。恕我直言,这没有多大意义。 (2认同)

Dro*_*iss 3

文档声明使用节点最新的核心包功能(迄今为止)。

这意味着当使用适当的节点时,您只需要packageManager在其中放置一个有效的字段值package.json并运行corepack enable,例如

{
  "name": "foo",
  "packageManager": "yarn@3.2.0",
  "scripts": {
  ...
  }
}
Run Code Online (Sandbox Code Playgroud)