开发应用程序
在 monorepo 中开发应用程序可以解锁强大的工作流程,使您能够对源代码控制进行原子提交,并轻松访问代码。
大多数开发任务都是长时间运行的任务,它们监视代码的变化。Turborepo 通过强大的终端 UI 和其他功能增强了这种体验,例如:
配置开发任务
在 turbo.json 中定义开发任务告诉 Turborepo 您将运行一个长期任务。这对于运行开发服务器、运行测试或构建应用程序等任务很有用。
要注册 dev 任务,请将其添加到您的 turbo.json 中,并设置两个属性:
{
"tasks": {
"dev": {
"cache": false,
"persistent": true
}
}
}
- "cache": false:告诉 Turborepo 不要尝试缓存任务的结果。由于这是一个开发任务,您可能会频繁更改代码,因此缓存结果并不有用。
- "persistent": true:告诉 Turborepo 保持任务运行直到您停止它。此键作为终端 UI 的信号,将任务视为长期运行和交互式的。此外,它防止您意外依赖不会退出的任务。
您现在可以运行 dev 任务来并行启动开发脚本:
turbo dev
在 dev 之前运行设置任务
您可能还想运行设置开发环境或预构建包的脚本。您可以使用 dependsOn 确保这些任务在 dev 任务之前运行:
{
"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 的包结构和以下任务和脚本:
{
"tasks": {
"dev": {
"persistent": true,
"cache": false
},
"lint": {
"dependsOn": ["^lint"]
}
}
}
{
"name": "@repo/ui"
"scripts": {
"dev": "tsc --watch",
"lint": "eslint ."
}
}
{
"name": "web"
"scripts": {
"dev": "next dev",
"lint": "eslint ."
},
"dependencies": {
"@repo/ui": "workspace:*"
}
}
当您运行 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 中配置环境变量了。