返回博客

Turborepo 1.7

2023年1月11日,星期三
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
Chris Olszewski
姓名
Chris Olszewski
Nicholas Yang
姓名
Nicholas Yang
X
@nicholaslyang

Turborepo 1.7 专注于通过为您的任务带来更多清晰度来改善开发人员体验

立即运行 npm install turbo@latest 进行更新,或通过全局安装 并运行 set-default-outputs 代码修改。

自信地安排您的长时间运行任务

为了避免可能导致任务永远无法运行的错误配置,您现在可以使用 persistent: true 配置选项告诉 Turborepo 关于不会自行退出的任务(如 dev 脚本)。当在任务上设置此配置时,Turborepo 将确保没有其他任务可以依赖此任务。这对于 dev 任务或带有 --watch 标志的测试运行程序很有用。

turbo.json
{
	"pipeline": {
		"dev": {
+			"persistent": true
		}
	}
}

以前,如果 任务 B 依赖于持久的 任务 A,则 任务 B 将永远不会执行,因为 任务 A 永远不会退出。通过将 任务 A 声明为 persistent,Turborepo 将防止发生此错误场景。

在此版本之前,我们一直建议对持久任务使用 turbo run <任务> --parallel。使用 --parallelturbo 会忽略您的依赖关系图并立即执行所有任务。

虽然 --parallel 确实提供了一个有用的退出通道,但这意味着用户必须告诉 Turborepo 如何 运行他们的任务,而不是声明任务是什么

与其丢弃整个拓扑依赖关系图,不如让 Turborepo 在保证您不依赖于不会以 persistent: true 退出的进程的情况下保留您的依赖关系图要精确得多。

全局 turbo

一旦您全局安装了 turbo,您现在可以从项目中的任何位置运行 Turborepo 任务。要这样做,请使用

终端
npm install turbo --global

turbo 现在可以在任何项目中使用。要查找本地 turbo 版本,turbo 将执行几个步骤,始终从当前目录向上查找

  1. 查找最近的 turbo.json。
  2. 如果找不到,请查找第一个带有 workspaces 属性的 package.json
  3. 如果找不到,请查找第一个 package.json

仅当本地安装的 turbo 版本不存在或无法找到时,才会使用全局安装的 turbo 版本。

turbo-inference

turbo --versionturbo bin 将分别显示将执行您的任务的 turbo 副本的版本和二进制位置。此外,使用 -vv--verbosity=2 运行始终会显示使用的是本地还是全局 turbo

终端
turbo --version --verbosity=2
2023-01-11T10:49:04.042-0500 [DEBUG] turborepo_lib::shim: No local turbo binary found at: /Users/knickman/Developer/vercel/my-awesome-monorepo/node_modules/.bin/turbo
2023-01-11T10:49:04.042-0500 [DEBUG] turborepo_lib::shim: Running command as global turbo
1.7.0

声明您的 outputs 以提高清晰度

以前,如果您没有为任务指定 outputs 键,Turborepo 会自动尝试缓存 dist/build/ 目录中的所有文件。

这对于特定框架的 build 任务效果很好,但是这种隐式行为并不适用于所有任务,因此效果不佳。我们发现,在许多使用 Turborepo 的开发人员、团队、项目和代码库中,自动缓存 dist/build/ 目录的假设给用户带来了问题。

在 1.7 版本中,此行为已删除,您现在需要明确告诉 turborepo 要缓存的内容。

turbo.json
{
  "pipeline": {
    "build": {
+     "outputs": ["dist/**", "build/**"]
    }
  }
}

如果您依赖于 1.7 以下版本的 Turborepo 中的默认缓存输出,您可以通过运行 @turbo/codemod set-default-outputs 代码修改获得相同的行为

终端
npx @turbo/codemod set-default-outputs

另请注意,您不再需要指定 outputs: [],因为不缓存任何内容现在是默认行为。代码修改还会从您的任务中删除此配置。

“仅错误”输出模式,用于更安静的日志

为了提高错误的可见性,社区成员 @dobesv 贡献了 一个解决方案,仅显示错误而不是任务运行中的所有日志。在调试管道时,可以使用 --output-logs=errors-only 来保持您的信噪比高,以便您可以专注于确保管道成功运行。这可以用作配置选项或作为 CLI 标志

终端
turbo build --output-logs=errors-only

社区

自从发布 Turborepo v1.6 并与 Turbopack 合并以来,我们看到了惊人的采用率和社区增长

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

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