升级

升级到 2.0

更新 turbo.json

通过运行以下命令开始从 1.x 升级到 2.0

终端
pnpm dlx @turbo/codemod migrate

这将更新你的 turbo.json 文件以适应从 1.x 到 2.0 的许多重大更改。

此外,name 字段将被添加到 Workspace 中任何没有该字段的 package.json 文件中。

须知: 

你也可以手动单独运行每个 codemod。访问 codemods 页面 以获取更多信息。

packageManager 字段添加到根目录 package.json

packageManager 字段 是 Node.js 生态系统中的一个约定,用于定义 Workspace 中预期使用的包管理器。

Turborepo 2.0 要求你的 Workspace 定义此字段,以提高代码库的稳定性和行为可预测性。如果你的根目录 package.json 中还没有该字段,请添加它

./package.json
{
+ "packageManager": "pnpm@9.2.0"
}

更新 eslint-config-turbo

eslint-config-turbo 帮助识别需要添加到 env 键中的环境变量以进行缓存。如果你正在使用它,请确保更新它以匹配你的主要版本。

更新 turbo run 命令

Turborepo 2.0 包括 turbo run 命令行为的行为和正确性改进。下面列出了更改摘要,这些更改可能对你的代码库产生影响,也可能没有影响

  • 环境变量的严格模式现在是默认模式,从宽松模式转变而来 (PR)
    • 如果你的任务中的脚本似乎缺少环境变量,你可以使用 --env-mode 选项 在每个命令的基础上选择退出此行为以逐步迁移。我们鼓励你更新任务中的 env 以考虑其所有环境变量,以便你可以尽快删除 --env-mode 选项。
    • 如果你想将仓库的默认模式设置回宽松模式,你可以 使用 envMode 配置 来实现。
  • Workspace 根目录现在是所有包的隐式依赖项 (PR)
    • 仓库根目录应尽可能少包含代码,因为对根目录的更改会影响仓库中的所有任务。此外,如果你在 Workspace 根目录中使用 内部包,则对这些依赖项的更改也会导致所有任务的缓存未命中。在这两种情况下,请考虑将代码移出根目录并 移动到一个包中
  • 移除 --ignore,转而使用 --filter 以及下面的图形正确性更改 (PR)
  • 移除 --scope 标志 (自 1.2 版本起已弃用) (PR)
  • 根目录 package.json 中的 engines 字段现在用于哈希运算 (PR)
  • --filter 不再为包名称推断命名空间 (PR)
  • 当没有匹配的包名称或目录时,--filter 现在会报错 (PR)
  • --only 限制任务依赖,而不是包依赖 (PR)