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

Committing .yarn directory to git when using yarn berry

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

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

我为那些不想将 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

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

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

Using a single package manager across your system has always been a problem. To be stable, installs need to be run with the same package manager version across environments, otherwise there's a risk we introduce accidental breaking changes between versions - after all, that's why the concept of lockfile was introduced in the first place! And with Yarn being in a sense your very first project dependency, it should make sense to "lock it" as well.

一旦 Yarn 被跟踪并“锁定”为每个项目的依赖项,如果您遵循 Yarn 2 的 zero-install strategy, the rationale for which is explained here.

,它最终会致力于 Git

我是 Yarn 的新手,但我花了多年时间从事 devops 工作,帮助开发人员弄清楚为什么他们的代码有时会在团队一半的笔记本电脑上正确构建,但在另一半上却不能,或者会突然开始失败在 CI 中构建,同时继续在其他地方工作。考虑到 Node 不断升级,但要将 npm 的版本在公司的每台计算机和代码库中保持一致基本上是不可能的,但将每个项目锁定到其自己的特定版本的 Yarn —— 通过承诺到 Git,保证在该项目的每次签出中可用 -- 解决了这个问题。

新的 docs states using node's newest corepack 功能(迄今为止)。

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

{
  "name": "foo",
  "packageManager": "yarn@3.2.0",
  "scripts": {
  ...
  }
}