逐步操作
你可能听说过 Yarn Plug'n'Play,并担心你的项目目前还不兼容。别担心!
此迁移将让你保留 node_modules
文件夹。只有在完成后,你才需要决定是否要花时间迁移到 Yarn PnP。无论你是否执行此操作或保留 node_modules
,迁移到 Yarn Modern 都将具有 许多优势。
请注意,这些命令只需要针对整个项目运行一次,并且只要启用了 Corepack,它们就会在所有贡献者拉取分支后自动生效。
迁移步骤
- 确保您使用的是 Node 18+
- 运行
corepack enable
激活 Corepack - 进入您的项目目录
- 运行
yarn set version berry
- 将您的
.npmrc
和.yarnrc
文件转换为.yarnrc.yml
(详情 在此) - 运行
yarn install
迁移锁定文件 - 提交所有更改
很好,您现在应该拥有一个可工作的 Yarn 安装!某些内容可能仍需要在您的 CI 脚本中进行一些调整(例如弃用 任意的 pre/post
脚本,或将 --frozen-lockfile
重命名为 --immutable
),但至少我们有一个可工作的项目。
重大更改
将您的配置更新为新设置
Modern 使用的配置文件样式与 Classic 不同。虽然对于锁定文件来说几乎是不可见的(因为我们会在运行时转换它们),但如果您依赖于 .npmrc
或 .yarnrc
文件,可能会导致问题。
- Yarn Modern 现在使用
.yarnrc.yml
。任何其他文件现在都被忽略 - 这包括.npmrc
。 - 正如新文件扩展名所证明的,Yarnrc 文件现在要编写为 YAML。
大多数配置密钥也已重命名,以便更加一致。可在 .yarnrc.yml
专用文档 中找到可用设置的综合列表,但以下是一些重要的设置
- 现在通过
npmRegistryServer
配置自定义注册表。 - 现在通过
npmAuthToken
配置注册表身份验证令牌。
明确调用 pre
和 post
脚本
对 生命周期脚本 的工作方式进行了一些更改,以明确其目的并消除令人困惑的行为。其中一项更改是,不再支持自定义 pre
和 post
脚本。因此,重写
{
"scripts": {
"prestart": "do-something",
"start": "http-server"
}
}
为
{
"scripts": {
"prestart": "do-something",
"start": "yarn prestart && http-server"
}
}
这仅适用于用户脚本,例如 start
和朋友。使用 preinstall
、install
和 postinstall
中的任何一个仍然很好。有关更多信息,请参阅 脚本文档。
使用 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 audit | yarn npm audit |
yarn create | yarn dlx create-NAME |
yarn global | yarn dlx (了解更多信息) |
yarn info | yarn npm info |
yarn list | yarn info -AR (--json ?) |
yarn login | yarn npm login |
yarn logout | yarn npm logout |
yarn outdated | yarn upgrade-interactive (了解更多) |
yarn publish | yarn npm publish |
yarn 升级 | yarn up (注意:更新所有工作区) |
yarn install --production | yarn workspaces focus --all --production |
已删除的命令
Yarn Classic (1.x) | 备注 |
---|---|
yarn 检查 | 现在在常规安装中检查缓存完整性 - 了解更多 |
yarn 导入 | 首先导入到经典版,然后迁移到 Yarn Modern |
yarn 许可证 | 插件的完美用例 - 了解更多 |
yarn 版本 | 使用 yarn --version 和 node -p process.versions |
尚未实现
这些功能尚未实现。欢迎帮助!
Yarn Classic (1.x) | 备注 |
---|---|
yarn 所有者 | 最终将作为 提供 |
yarn 团队 | 最终将作为 提供 |