跳至主要内容

逐步操作

提示

你可能听说过 Yarn Plug'n'Play,并担心你的项目目前还不兼容。别担心!

此迁移将让你保留 node_modules 文件夹。只有在完成后,你才需要决定是否要花时间迁移到 Yarn PnP。无论你是否执行此操作或保留 node_modules,迁移到 Yarn Modern 都将具有 许多优势

信息

请注意,这些命令只需要针对整个项目运行一次,并且只要启用了 Corepack,它们就会在所有贡献者拉取分支后自动生效。

迁移步骤

  1. 确保您使用的是 Node 18+
  2. 运行 corepack enable 激活 Corepack
  3. 进入您的项目目录
  4. 运行 yarn set version berry
  5. 将您的 .npmrc.yarnrc 文件转换为 .yarnrc.yml(详情 在此
  6. 运行 yarn install 迁移锁定文件
  7. 提交所有更改

很好,您现在应该拥有一个可工作的 Yarn 安装!某些内容可能仍需要在您的 CI 脚本中进行一些调整(例如弃用 任意的 pre/post 脚本,或将 --frozen-lockfile 重命名为 --immutable),但至少我们有一个可工作的项目。

重大更改

将您的配置更新为新设置

Modern 使用的配置文件样式与 Classic 不同。虽然对于锁定文件来说几乎是不可见的(因为我们会在运行时转换它们),但如果您依赖于 .npmrc.yarnrc 文件,可能会导致问题。

  • Yarn Modern 现在使用 .yarnrc.yml。任何其他文件现在都被忽略 - 这包括 .npmrc
  • 正如新文件扩展名所证明的,Yarnrc 文件现在要编写为 YAML

大多数配置密钥也已重命名,以便更加一致。可在 .yarnrc.yml 专用文档 中找到可用设置的综合列表,但以下是一些重要的设置

明确调用 prepost 脚本

生命周期脚本 的工作方式进行了一些更改,以明确其目的并消除令人困惑的行为。其中一项更改是,不再支持自定义 prepost 脚本。因此,重写

{
"scripts": {
"prestart": "do-something",
"start": "http-server"
}
}

{
"scripts": {
"prestart": "do-something",
"start": "yarn prestart && http-server"
}
}
注释

这仅适用于用户脚本,例如 start 和朋友。使用 preinstallinstallpostinstall 中的任何一个仍然很好。有关更多信息,请参阅 脚本文档

使用 yarn dlx 代替 yarn global

Yarn 专注于项目管理,而管理系统级包被认为超出了我们的范围。因此,yarn global 已被移除,需要用 yarn dlx 替换,以运行一次性脚本。

不要使用 bundleDependencies

bundleDependencies 字段(或 bundledDependencies)是过去的一个产物,过去它允许你定义一组包,这些包将按原样存储在包存档中,包括 node_modules 等。此功能存在许多问题

  • 它使用 node_modules,而 node_modules 在即插即用安装中不存在。
  • 它对包内部的提升进行编码,从而干扰其他包的提升。

那么如何替换它们?有不同的方法

  • 如果你需要修补一个包,只需 fork 它或通过 file: 协议 引用它(即使是传递依赖项使用此协议也是完全可以的)。portal:patch: 协议也是选项,尽管它们只对 Yarn 消费者有效。

  • 如果您需要将一个包作为独立包(无依赖项)运送给您的客户,请使用 Esbuild、Webpack、Rollup 或类似工具自行打包。

nmHoistingLimits 替换 nohoist

Yarn Classic 中的 nohoist 设置是为 React Native 构建的,以支持工作区,但其工作方式(通过全局模式)导致了许多错误和混乱,没有人真正确定需要设置哪些模式。因此,我们简化了此功能,以便仅支持三个已识别的模式。

如果您正在使用 nohoist,我们建议您从清单配置中将其删除,而是在 .yarnrc.yml 文件中设置 nmHoistingLimits

nmHoistingLimits: workspaces

CLI 更改

重命名的命令

Yarn Classic (1.x)Yarn Modern
yarn audityarn npm audit
yarn createyarn dlx create-NAME
yarn globalyarn dlx (了解更多信息)
yarn infoyarn npm info
yarn listyarn info -AR (--json?)
yarn loginyarn npm login
yarn logoutyarn npm logout
yarn outdatedyarn upgrade-interactive (了解更多)
yarn publishyarn npm publish
yarn 升级yarn up(注意:更新所有工作区)
yarn install --productionyarn workspaces focus --all --production

已删除的命令

Yarn Classic (1.x)
备注
yarn 检查现在在常规安装中检查缓存完整性 - 了解更多
yarn 导入首先导入到经典版,然后迁移到 Yarn Modern
yarn 许可证插件的完美用例 - 了解更多
yarn 版本使用 yarn --versionnode -p process.versions

尚未实现

这些功能尚未实现。欢迎帮助!

Yarn Classic (1.x)
备注
yarn 所有者最终将作为
yarn npm owner
提供
yarn 团队最终将作为
yarn npm team
提供