升级

升级到 2.0

更新 turbo.json

从 1.x 升级到 2.0,首先运行:

Terminal
npx @turbo/codemod migrate

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

此外,工作空间中任何没有 name 字段的 package.json 都会被添加该字段。

Good to know: 

你也可以手动单独运行每个代码修改。访问 代码修改页面 了解更多信息。

在根目录的 package.json 中添加 packageManager 字段

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

Turborepo 2.0 要求你的工作空间定义这个字段,以提高代码库的稳定性和行为可预测性。如果你还没有这个字段,请将其添加到根目录的 package.json 中:

./package.json
{
+ "packageManager": "npm@10.8.1"
}

更新 eslint-config-turbo

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

更新 turbo run 命令

Turborepo 2.0 包含了 turbo run 命令的行为和正确性改进。以下是变更摘要,这些变更可能会也可能不会影响你的代码库:

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