Turborepo 1.3

2022年6月23日星期四
Greg Soltis
姓名
Greg Soltis
X
@gsoltis
Nathan Hammond
姓名
Nathan Hammond
Tom Knickman
姓名
Tom Knickman
X
@tknickman
Jared Palmer
姓名
Jared Palmer
X
@jaredpalmer
Gaspar Garcia
姓名
加斯帕·加西亚
X
@gaspargarcia_
Becca Z.
姓名
贝卡·Z.
X
@becca__z

Turborepo 1.3 带来了改进的缓存和灵活性,包括:

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

管道 inputs

除了环境变量、依赖项和管道配置turbo 在计算每个 package.json 脚本的哈希指纹(turbo 用来索引其缓存和确定脚本是否需要重新执行的键)时,会考虑包文件夹中所有未被 Git 忽略的文件。使用 Turborepo 1.3+,您现在可以在 turbo.json pipeline 中指定 inputs 的 glob 模式,以控制哪些文件与特定脚本的缓存相关。这意味着您现在可以在 turbo.json 中表达以下内容:

让我们来看一个具体示例:假设我们有一个单仓,其中包含一个 Next.js 应用程序(用于文档网站,位于 ./apps/docs-site),一些包,以及单仓根目录 ./docs 文件夹中的一些 Markdown 文件。

示例单仓
.
├── docs/
   ├── api-reference.md
   ├── getting-started.md
   └── intro.md
├── apps/
   ├── docs-site/
   ├── components/
   ├── pages/
   └── [slug].js
   ├── README.md
   └── package.json
   └── web-site/
       ├── pages/
       ├── README.md
       └── package.json
├── packages/
   ├── configs/
   └── ui/
├── package.json
└── turbo.json

假设 Next.js docs-site 渲染 ./docs 文件夹中的 Markdown 文件。我们现在可以在应用的 package.json 中设置 build 脚本,使用 turbo.json 中的 inputs 来更好地指定哪些文件是相关的(以及哪些应该影响缓存),如下所示:

Turborepo logo
./turbo.json
{
  "$schema": "https://turbo.net.cn/schema.json",
  "pipeline": {
    // ... omitted for brevity
    "build": {
      "dependsOn": ["^build"],
      "outputs": [".next/**", "!.next/cache/**", "dist/**"]
    },
    "docs#build": {
      "dependsOn": ["^build"],
      "outputs": [".next/**", "!.next/cache/**"],
      // Define set of relevant globs which impact caching of docs site
      // builds
      "inputs": [
        "../../docs/**/*.md",
        "pages/**",
        "components/**",
        "package.json"
      ]
    }
  }
}

注意:与 outputs 一样,inputs 是相对于相关的 package.json 定义的,但它们可以位于给定文件夹之外(例如 ../../docs/**)。

从单仓根目录运行和缓存脚本

从 1.3 版本开始,turbo 现在可以从单仓根目录的 package.json 文件中运行和缓存脚本,这将在迁移到 Turborepo 时提供显著帮助。

要进行设置,请在 turbo.jsonpipeline 配置中,使用 "//#<script>": {...} 形式指定一个根脚本。// 告诉 turbo 该脚本是相对于单仓根目录的,而不是每个工作区包的。

关于根脚本和执行范围,有 2 个重要事项需要注意:

一个定义根脚本 check-examples 并选择将根目录纳入 test 的示例管道可能如下所示:

./package.json
{
  "name": "my-turborepo",
  "private": true,
  "scripts": {
    "test": "echo 'test!'",
    "check-examples": "./check-examples.sh"
  },
  "devDependencies": {
    "turbo": "latest"
  }
}
Turborepo logo
./turbo.json
{
  "$schema": "https://turbo.net.cn/schema.json",
  "pipeline": {
    "build": {
      "dependsOn": ["^build"]
    },
    "test": {
      "dependsOn": ["^build"],
      "outputs": []
    },
    // This will cause the "test" script from all workspace package.json's
    // AND the root package.json to be included when "turbo run test" is run
    "//#test": {
      "dependsOn": [],
      "outputs": []
    },
    // This will cause the "check-examples" script in the root package.json
    // to be run when "turbo run check-examples" is run. Since a general
    // "check-examples" script is not defined in the pipeline, only the root
    // package.json's "check-examples" script will be included
    // when "turbo run check-examples" is run
    "//#check-examples": {
      "dependsOn": [],
      "outputs": [],
      "inputs": [
        "examples/**/*.ts",
        "examples/**/*.tsx",
        "examples/**/*.json",
        "examples/**/*.js",
        "examples/**/*.yaml",
        "cli/**/*.ts",
        "./scripts/run-example.sh"
      ]
    }
  }
}

注意:我们建议在 pipeline 中声明根任务时指定 inputs 以改善缓存。

新的 CI/CD 秘籍

我们增加了使用 Turborepo 和远程缓存的秘籍,支持:

如果您希望看到此处有其他秘籍,请通过打开 GitHub 讨论 告知我们。

其他错误修复和改进

社区

4 月初发布 Turborepo v1.2 以来,我们看到了令人难以置信的采用和社区增长:

Turborepo 是包括我们核心团队在内的 136 多位贡献者共同努力的成果。

本次发布由以下贡献者提供:@gsoltis、@nathanhammond、@tknickman、@jaredpalmer、@zvictor、@ObliviousHarmony、@O4epegb、@rafaeltab、@mcmontseny、@bertspaan、@Jastor11 和 @enBonnet

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