Turborepo

开发应用程序

在单体仓库中开发应用程序可以解锁强大的工作流程,使您能够对源代码进行原子提交,并轻松访问代码。

大多数开发任务都是长时间运行的任务,会监视代码的更改。Turborepo 通过强大的终端 UI 和其他功能(如)增强了此体验

配置开发任务

turbo.json 中定义开发任务会告诉 Turborepo 您将运行一个长时间存在的任务。这对于运行开发服务器、运行测试或构建应用程序等操作非常有用。

要注册一个 dev 任务,请将其添加到您的 turbo.json 中,其中包含两个属性

./turbo.json
{
  "tasks": {
    "dev": {
      "cache": false,
      "persistent": true
    }
  }
}
  • "cache": false:告诉 Turborepo 不要尝试缓存任务的结果。由于这是一个开发任务,您可能会频繁更改代码,因此缓存结果没有用处。
  • "persistent": true:告诉 Turborepo 让任务保持运行状态,直到您停止它。此键用作您的终端 UI 将任务视为长时间运行和交互的信号。此外,它可以防止您意外依赖不会退出的任务。

您现在可以运行您的 dev 任务以并行启动您的开发脚本

终端
turbo dev

与任务交互

某些脚本允许您使用 stdin 输入进行交互。使用 终端 ui,您可以选择一个任务,进入它,并像通常一样使用 stdin

一个任务必须是 交互式的 才能启用此功能。

dev 之前运行设置任务

您可能还需要运行一些脚本来设置您的开发环境或预构建包。您可以使用 dependsOn 确保这些任务在 dev 任务之前运行

./turbo.json
{
  "tasks": {
    "dev": {
      "cache": false,
      "persistent": true,
      "dependsOn": ["//#dev:setup"]
    },
    "//#dev:setup": {
      "outputs": [".codegen/**"]
    }
  }
}

在此示例中,我们正在使用一个 根任务,但您可以对包中的任意任务使用相同的想法。

运行特定的应用程序

--filter 标志允许您选择 包图 的子集,以便您可以为特定的应用程序及其依赖项运行 dev 任务

终端
turbo dev --filter=web

监听模式

许多工具都有一个内置的监视器,例如 tsc --watch,它会响应源代码中的更改。但是,有些工具没有。

turbo watch 会向任何工具添加一个依赖感知的监视器。源代码的更改将遵循您在 turbo.json 中描述的任务图,就像您的所有其他任务一样。

例如,使用像 create-turbo 这样的包结构,其中包含以下任务和脚本

turbo.json
{
  "tasks": {
    "dev": {
      "persistent": true,
      "cache": false
    },
    "lint": {
      "dependsOn": ["^lint"]
    }
  }
}

当您运行 turbo watch dev lint 时,您将看到,无论 ESLint 是否具有内置监视器,只要您对源代码进行更改,lint 脚本就会重新运行。turbo watch 还知道内部依赖关系,因此 @repo/ui 中的代码更改将重新运行 @repo/uiweb 中的任务。

web 中的 Next.js 开发服务器和 @repo/ui 中的 TypeScript 编译器内置监视器将像往常一样继续工作,因为它们已标记为 persistent

有关更多信息,请访问 turbo watch 参考

限制

清理任务

在某些情况下,您可能希望在 dev 任务停止时运行一个脚本。Turborepo 在退出时无法运行那些清理脚本,因为当您的 dev 任务退出时,turbo 也会退出。

相反,创建一个 turbo dev:teardown 脚本,在您退出主 turbo dev 任务后单独运行该脚本。

下一步

在您拥有一个想要部署的应用程序版本后,就可以学习如何在 Turborepo 中配置环境变量了。

小时

总计算节省
开始使用
远程缓存 →

本页内容