返回博客

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 中删除。

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 管道,该管道按顺序构建它们。

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 集成到您的工作流程中

其他错误修复和改进

社区

自从六月份发布 Turborepo v1.3 以来,我们看到了令人难以置信的采用和社区增长

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

此版本由以下人员的贡献促成:@B2o5T、@chitchu、@elis、@gsoltis、@harshcut、@jaredpalmer、@kocisov、@nathanhammond、@neolivz、@NuroDev、@oneezy、@samouri、@shayc、@StevenMatchett、@tknickman、@trevorr、@zsoldosp 等!

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