开发应用程序
在单体仓库中开发应用程序可以解锁强大的工作流程,使你能够向源代码控制进行原子提交,并轻松访问代码。
大多数开发任务都是长时间运行的任务,它们会监视代码的变化。Turborepo 通过强大的终端 UI 和其他功能增强了这种体验,比如:
配置开发任务
在 turbo.json
中定义开发任务告诉 Turborepo,你将运行一个长期存在的任务。这对于运行开发服务器、运行测试或构建应用程序等任务很有用。
要注册 dev
任务,请使用两个属性将其添加到你的 turbo.json
中:


- "cache": false:告诉 Turborepo 不要尝试缓存任务的结果。由于这是一个开发任务,你可能会频繁更改代码,所以缓存结果没有用处。
- "persistent": true:告诉 Turborepo 保持任务运行,直到你停止它。此键作为信号,让你的终端 UI 将任务视为长期运行和交互式的。此外,它还可以防止你意外依赖于不会退出的任务。
现在你可以运行 dev
任务来并行启动你的开发脚本:
在 dev
之前运行设置任务
你可能还想运行设置开发环境或预构建包的脚本。你可以使用 dependsOn
确保这些任务在 dev
任务之前运行:


在这个例子中,我们使用了根任务,但你也可以对包中的任意任务使用相同的思路。
运行特定应用程序
--filter
标志允许你选择包图的子集,这样你就可以为特定应用程序及其依赖项运行 dev
任务:
使用终端 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 watch dev lint
时,你会看到每当你对源代码进行更改时,lint
脚本都会重新运行,尽管 ESLint 没有内置的监视器。turbo watch
也意识到内部依赖关系,所以在 @repo/ui
中的代码更改将在 @repo/ui
和 web
中重新运行任务。
web
中的 Next.js 开发服务器和 @repo/ui
中的 TypeScript 编译器内置监视器将继续照常工作,因为它们被标记为 persistent
。
有关更多信息,访问 turbo watch
参考文档。
限制
拆卸任务
在某些情况下,你可能希望在 dev
任务停止时运行脚本。Turborepo 无法在退出时运行那些拆卸脚本,因为当你的 dev
任务退出时,turbo
也会退出。
相反,创建一个 turbo dev:teardown
脚本,在你退出主要的 turbo dev
任务后单独运行。
下一步
一旦你有了想要部署的应用程序版本,就该学习如何在 Turborepo 中配置环境变量了。