构建您的仓库

升级

了解如何将 Turborepo 从 1.x 升级到 2.0,包括配置更新、包管理器字段添加和行为变更。

升级到 2.0

更新 turbo.json

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

pnpm dlx @turbo/codemod migrate

这将为从 1.x 到 2.0 的许多破坏性更改更新您的 turbo.json

此外,将为工作区中没有 name 字段的任何 package.json 添加 name 字段。

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

向根 package.json 添加 packageManager 字段

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

Turborepo 2.0 要求您的工作区定义此字段,以提高代码库的稳定性和行为可预测性。如果您还没有,请将此字段添加到您的根 package.json

{
+ "packageManager": "pnpm@9.2.0"
}

更新 eslint-config-turbo

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

更新 turbo run 命令

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

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