升级

升级到 2.0

更新 turbo.json

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

终端
pnpm dlx @turbo/codemod migrate

这将更新您的 turbo.json 文件,以适应从 1.x 到 2.0 的许多破坏性更改。

此外,还会向工作区中任何没有 name 字段的 package.json 添加一个 name 字段。

须知: 

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

向根 package.json 添加 packageManager 字段

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

Turborepo 2.0 要求您的工作区定义此字段,以提高代码库的稳定性和行为可预测性。如果您还没有,请将此字段添加到您的根 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 配置来实现。
  • 工作区根目录现在是所有包的隐式依赖项(PR
    • 存储库应尽可能少地包含根目录中的代码,因为对根目录的更改会影响存储库中的所有任务。此外,如果您在工作区根目录中使用 内部包,对这些依赖项的更改也会导致所有任务的缓存失效。在这两种情况下,请考虑将代码移出根目录并 移到一个包中
  • --ignore 已被 --filter 取代,并结合下面的图形正确性更改(PR
  • 移除了 --scope 标志(自 1.2 版本起已弃用)(PR
  • package.json 中的 engines 字段现在用于哈希计算(PR
  • --filter 不再推断包名称的命名空间(PR
  • 当没有匹配的包名称或目录时,--filter 现在会报错(PR
  • --only 限制任务依赖项而不是包依赖项(PR