Turborepo 1.4

2022年8月9日,星期二
Greg Soltis
姓名
Greg Soltis
X
@gsoltis
Nathan Hammond
姓名
Nathan Hammond
Tom Knickman
姓名
Tom Knickman
X
@tknickman
Anthony Shew
姓名
Anthony Shew
X
@anthonysheww
Jared Palmer
姓名
Jared Palmer
X
@jaredpalmer
Mehul Kar
姓名
Mehul Kar
X
@mehulkar

Turborepo 1.4 带来了

立即运行 npm install turbo@latest 进行更新。

环境变量自动包含

为了帮助确保跨环境的正确缓存,Turborepo 现在将自动推断并包含公共环境变量,在为使用 Astro、Create React App、Gatsby、Next.js、Nuxt、SvelteKit、Vite、Vue 等构建的应用程序计算缓存键时。如果您手动声明了特定于框架的公共环境变量,可以安全地将它们从 turbo.json 中移除。

Turborepo logo
turbo.json
{
  "pipeline": {
    "build": {
      "dependsOn": [
        "^build"
-       // Include build time public inlined environment variables that
-       // are different in development and production, so that
-       // Turborepo does not use the same cached build
-       // across environments
-       "$NEXT_PUBLIC_EXAMPLE_ENV_VAR"
      ]
    }
  }
}

请注意,此自动检测和包含仅在 Turborepo 成功推断出您的应用程序所使用的框架时才有效。此外,环境变量将仅包含在使用该框架的工作区任务的缓存键中。换句话说,为 Next.js 应用程序推断的环境变量将仅包含在被检测为 Next.js 应用程序的工作区的缓存键中。单体仓库中其他工作区的任务将不受影响。

例如,考虑一个包含三个工作区的单体仓库:一个 Next.js 项目、一个 Create React App 项目和一个 TypeScript 包。每个都有一个 build 脚本,并且两个应用程序都依赖于 TypeScript 项目。假设此 Turborepo 具有一个标准的 turbo.json 管道,按顺序构建它们

Turborepo logo
turbo.json
{
  "pipeline": {
    "build": {
      "dependsOn": ["^build"]
    }
  }
}

从 1.4 版本开始,当您运行 turbo run build 时,Turborepo 在构建 TypeScript 包时不会考虑任何相关的构建时环境变量。但是,在构建 Next.js 应用程序时,Turborepo 将推断以 NEXT_PUBLIC_ 开头的环境变量可能会更改 .next 文件夹的输出,因此在计算哈希时应包含这些变量。同样,在计算 Create React App 的 build 脚本的哈希时,所有以 REACT_APP_PUBLIC_ 开头的构建时环境变量都将被包含。

这种按框架进行的哈希特异性改进是实现最优、安全和正确缓存的重要一步。

eslint-config-turbo

我们还创建了一个新的 ESLint 配置,用于进一步的编辑器内辅助,以帮助确保您的 Turborepo 缓存可以在每个环境中正确共享。虽然我们的新哈希算法应该涵盖大多数框架的大多数情况,但此 ESLint 配置将为使用非框架前缀但影响构建输出(即缓存)的其他构建时内联环境变量的团队,以及使用我们无法自动检测的内部框架的团队提供编辑器内反馈。

要开始使用,请在您的根 eslintrc 文件中扩展 eslint-config-turbo

.eslint.config.js
{
  // Automatically flag env vars missing from turbo.json
  "extends": ["next/core-web-vitals", "turbo"]
}

如果您更喜欢对规则进行更多控制,可以直接安装和配置 eslint-plugin-turbo 插件,方法是先将其添加到插件中,然后配置所需的规则

.eslint.config.js
{
  "extends": ["next/core-web-vitals"],
  "plugins": ["turbo"],
  "rules": {
    // Automatically flag env vars missing from turbo.json
    "turbo/no-undeclared-env-vars": "error"
  }
}

如果您在代码中使用了未在 turbo.json 中声明的非框架相关环境变量,该插件将发出警告。

从 1.4.x 版本开始,我们现在将 eslint-config-turbo 包含在我们所有的示例中以及通过 npx create-turbo 生成的新项目中。

ESLint 文档中了解有关 ESLint 配置和插件的更多信息。

新的框架和库示例

根据您的反馈和建议,我们创建了新的示例来将 Turborepo 集成到您的工作流中

其他错误修复和改进

社区

6月发布 Turborepo v1.3 以来,我们看到了惊人的采用和社区增长

Turborepo 是包括我们核心团队在内的所有贡献者共同努力的结果。

此版本由以下贡献者提供:@B2o5T, @chitchu, @elis, @gsoltis, @harshcut, @jaredpalmer, @kocisov, @nathanhammond, @neolivz, @NuroDev, @oneezy, @samouri, @shayc, @StevenMatchett, @tknickman, @trevorr, @zsoldosp, 等等!

感谢您持续的支持、反馈和协作,使 Turborepo 成为您的首选构建工具。