Turborepo logo

开发应用程序

在 Monorepo 中开发应用程序可以解锁强大的工作流程,使你能够进行原子提交到源代码控制,并轻松访问代码。

大多数开发任务都是长时间运行的任务,会监视代码的更改。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

dev 之前运行设置任务

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

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

在本例中,我们使用了一个 根任务,但你也可以将相同的想法用于 包中的任意任务

运行特定的应用程序

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

终端
turbo dev --filter=web

使用终端 UI

Turborepo 的终端 UI 启用了一些功能,这些功能围绕你的任务创建了高度交互式的体验。

自定义你的视图

你可以使用快捷键快速根据你的需求调整 UI。

快捷键操作
m切换弹出快捷键列表
/在任务列表中选择下一个/上一个任务
j/k在任务列表中选择下一个/上一个任务
p切换所选任务的选择固定
h切换任务列表的可见性
c当日志被突出显示时,复制所选内容到系统剪贴板
u/d向上和向下滚动日志

与任务交互

你的某些工具可能允许你向其中键入输入。例如 Drizzle ORM 的交互式迁移或 Jest 的测试套件过滤和重新运行。

你可以与 标记为交互式 的任务进行交互,以向它们提供输入。

快捷键操作
i开始交互
Ctrl+z停止交互

监听模式

许多工具都有内置的监听器,例如 tsc --watch,它会对源代码的更改做出响应。但是,有些工具没有。

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

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

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

当你运行 turbo watch dev lint 时,你会看到每当你更改源代码时,lint 脚本都会重新运行,尽管 ESLint 没有内置的监听器。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 中配置环境变量了。

小时

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

本页内容