开发应用程序
在 Monorepo 中开发应用程序可以解锁强大的工作流程,使你能够进行原子提交到源代码控制,并轻松访问代码。
大多数开发任务都是长时间运行的任务,它们会监视代码的更改。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 中配置环境变量了。