Turborepo 1.1

Jared Palmer
姓名
Jared Palmer
X
@jaredpalmer
Becca Z.
姓名
Becca Z.
X
@becca__z
Gaspar Garcia
姓名
Gaspar Garcia
X
@gaspargarcia_
Greg Soltis
姓名
Greg Soltis
X
@gsoltis

自从 12 月中旬发布 Turborepo v1.0 以来,我们看到了令人难以置信的采用率

Weekly npm downloads of turbo

我们正在通过 Turborepo v1.1 进一步提高构建性能和缓存,其特点包括

立即运行 npm install turbo@latest 进行更新。运行 turbo 后,您将看到关于如何使用 @turbo/codemod 运行 v1.1 自动迁移的说明。

自动迁移

Turborepo 现在提供幂等代码转换和自动迁移脚本(又名“codemod”),以帮助在功能被弃用或将来会被弃用时升级您的 Turborepo 代码库。

Codemod 是以编程方式在您的代码库上运行的转换。这通过自动将大量更改应用于您的代码来节省您的时间,而无需手动浏览和编辑每个文件。

用法

终端
npx @turbo/codemod <transform> <path>

有关特定转换的更多信息,请查看新的 Codemods 文档

turbo.json 支持

Turborepo 配置现在在您的 monorepo 根目录下的 turbo.json 文件中定义。对于那些想要在代码编辑器中快速跳转到其 Turborepo 配置的人来说,这是一个比在 package.json 中使用 turbo 键更好的改进。

要从 package.json 中的当前配置自动迁移,请检出一个新分支,导航到您的 monorepo 根目录并运行以下 codemod

终端
npx @turbo/codemod create-turbo-config .

有关此转换的更多信息,请查看文档

更快的包管理器检测

Turborepo 现在支持最近在 package.json 中建立的 packageManager 字段,以实现更快的包管理器检测。以前,turbo 会检查特定文件以推断此信息。要自动设置此字段,请检出一个新分支,导航到您的 monorepo 根目录并运行

终端
npx @turbo/codemod add-package-manager .

有关此转换的更多信息,请查看文档

环境变量依赖项

当您将 turbo 与在构建时内联环境变量的工具(例如 Next.js 或 Create React App)一起使用时,重要的是您告诉 turbo 关于它,以避免运送带有错误环境变量的缓存工件。

您现在可以根据环境变量的值和文件内容来控制 turbo缓存指纹识别(又名哈希)行为

./turbo.json
{
  "pipeline": {
    "build": {
      "dependsOn": {
        "^build"
        // env vars will impact hashes of all "build" tasks
        "$SOME_ENV_VAR"
      },
      "outputs": ["dist/**"]
    },
    "web#build": { // override settings for the "build" task for the "web" app
      "dependsOn": [
        "^build",
          // env vars that will impact the hash of "build" task for only "web" app
          "$STRIPE_SECRET_KEY",
          "$NEXT_PUBLIC_STRIPE_PUBLIC_KEY",
          "$NEXT_PUBLIC_ANALYTICS_ID",
      ],
      "outputs": [".next/**", "!.next/cache/**"],
    },
    "docs#build": { // override settings for the "build" task for the "docs" app
      "dependsOn": [
        "^build",
          // env vars that will impact the hash of "build" task for only "web" app
          "$STRIPE_SECRET_KEY",
          "$NEXT_PUBLIC_STRIPE_PUBLIC_KEY",
          "$NEXT_PUBLIC_ANALYTICS_ID",
      ],
      "outputs": [".next/**", "!.next/cache/**"],
    }
  },
  "globalDependencies": [
    "$GITHUB_TOKEN"// env var that will impact the hashes of all tasks,
    "tsconfig.json" // file contents will impact the hashes of all tasks,
    ".env.*" // glob file contents will impact the hashes of all tasks,
  ]
}

注意:在大多数 monorepo 中,您通常不会在共享包中使用环境变量,而主要是在应用程序中使用。因此,为了获得更高的缓存命中率,您应该只在应用程序特定的任务中包含使用/内联的环境变量。

有关更多信息,请阅读缓存和哈希文档

部分 Yarn v2/v3 支持

除了 Yarn v1、npm 和 pnpm 包管理器之外,Turborepo 现在还支持带有 nodeLinker: "node-modules".yarnrc.yml 中设置 的 Yarn v2+。此键告诉 Yarn v2+ 模仿 Yarn v1 的 node_modules 安装行为。当前不支持 Yarn v2+ Plug'n'Play(又名“PnP”)。

下一步是什么?

自从我们发布以来,Turborepo 一直专注于无缝增量采用/迁移和加速 CI/CD。我们致力于这两个价值,但现在我们还将专注于改善 Turborepo 的日常人体工程学,以用于本地开发和可观察性。我们对下一个篇章感到非常兴奋,并将很快分享更多细节。

我们正在招聘!

Vercel 的 Turborepo 团队正在招聘!我们正在专门寻找全职高级全栈软件工程师高级 DevOps/基础设施工程师,以帮助我们使 Turborepo 变得更好。