返回博客

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/codemodv1.1 运行自动迁移的说明。

自动迁移

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

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

用法

终端
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 现在还支持 Yarn v2+,并且.yarnrc.yml 中设置了 nodeLinker: "node-modules"。 此键告诉 Yarn v2+ 模拟 Yarn v1 的 node_modules 安装行为。 当前不支持 Yarn v2+ Plug'n'Play(又名“PnP”)。

下一步是什么?

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

我们正在招聘!

Vercel 的 Turborepo 团队正在招聘! 我们特别需要全职高级全栈软件工程师高级 DevOps/基础设施工程师来帮助我们使 Turborepo 变得更好。