单仓库中的开发任务
绝大多数开发工作流程看起来像这样
- 打开一个仓库
- 运行一个
dev
任务,同时进行开发 - 在一天结束时,关闭
dev
任务并关闭仓库。
dev
可能是您仓库中最常运行的任务,因此正确设置它很重要。
dev
任务类型
dev
任务有多种形式和大小
- 为 Web 应用程序运行本地开发服务器
- 运行
nodemon
(在新标签页中打开) 以在每次代码更改时重新运行后端进程 - 在
--watch
模式下运行测试
使用 Turborepo 设置
您应该在您的 turbo.json
中像这样指定您的 dev
任务。
{
"pipeline": {
"dev": {
"cache": false,
"persistent": true
}
}
}
由于 dev
任务不会生成输出,因此 outputs
为空。 dev
任务也独一无二,因为您很少想 缓存 它们,因此我们将 cache
设置为 false
。我们还将 persistent
设置为 true
,因为 dev
任务是长时间运行的任务,我们希望确保它不会阻止任何其他任务执行。
设置 package.json
您还应该在您的根 package.json
中提供一个 dev
任务
{
"scripts": {
"dev": "turbo run dev"
}
}
这使开发人员能够直接从他们的正常任务运行器中运行该任务。
在 dev
之前运行任务
在某些工作流程中,您可能希望在运行 dev
任务之前运行一些任务。例如,生成代码或运行 db:migrate
任务。
在这些情况下,使用 dependsOn
来指定任何 codegen
或 db:migrate
任务应该在 dev
运行之前运行。
{
"pipeline": {
"dev": {
"dependsOn": ["codegen", "db:migrate"],
"cache": false
},
"codegen": {
"outputs": ["./codegen-outputs/**"]
},
"db:migrate": {
"cache": false
}
}
}
然后,在您的应用程序的 package.json
中
{
"scripts": {
// For example, starting the Next.js dev server
"dev": "next",
// For example, running a custom code generation task
"codegen": "node ./my-codegen-script.js",
// For example, using Prisma
"db:migrate": "prisma db push"
}
}
这意味着您的 dev
任务的用户 **不需要担心代码生成或迁移他们的数据库** - 这些操作会在他们的开发服务器启动之前完成。
仅在特定工作区运行 dev
假设您想在位于 <root>/apps/docs
的 docs
工作区中运行 dev
任务。 turbo
可以从您的目录推断出工作区,因此如果您运行
cd <root>/apps/docs
turbo run dev
turbo
会自动识别您在 docs
工作区中,并运行 dev
任务。
要从存储库中的任何其他位置运行相同的任务,请使用 --filter
语法。例如
turbo run dev --filter docs
运行设置任务
您可能需要在持久、长时间运行的开发任务运行之前运行一些任务。设置步骤的一些示例包括
- 预构建包
- 设置 Docker 容器
- 检查 Node 或包管理器版本
如果您将这些设置任务命名为 dev
,您将在 turbo.json
中与您的持久任务发生命名冲突。相反,您可以将这些设置任务重命名为 setup-dev
,并为您的 dev
任务依赖这些 setup-dev
任务
{
"pipeline": {
"dev": {
"dependsOn": [
// Wait for tasks in dependencies
"^setup-dev"
// Wait for tasks in same package
"setup-dev"
// Wait for `setup-dev` in a specific package
"my-package#setup-dev"
],
},
"setup-dev": {},
}
}
使用环境变量
在开发过程中,您经常需要使用环境变量。这些变量允许您自定义程序的行为 - 例如,在开发和生产环境中指向不同的 DATABASE_URL
。
我们建议使用名为 dotenv-cli
(在新标签页中打开) 的库来解决这个问题。
我们希望每个开发人员都能在使用 Turbo 时获得良好的体验。下面记录的方法 **不** 符合这些标准。
我们正在努力为这个问题提供一个一流的解决方案 - 但在您等待的同时,以下是最优的解决方案。
教程
- 在您的 根工作区 中安装
dotenv-cli
# Installs dotenv-cli in the root workspace
npm add dotenv-cli
- 在您的根工作区中添加一个
.env
文件
├── apps/
├── packages/
+ ├── .env
├── package.json
└── turbo.json
添加您需要注入的任何环境变量
DATABASE_URL=my-database-url
- 在您的根
package.json
中,添加一个dev
脚本。在它前面加上dotenv
和--
参数分隔符
{
"scripts": {
"dev": "dotenv -- turbo run dev"
}
}
这将在运行 turbo run dev
之前从 .env
中提取环境变量。
- 现在,您可以运行您的 dev 脚本
npm run dev
您的环境变量将被填充!在 Node.js 中,这些变量可以在 process.env.DATABASE_URL
上访问。
您还应该 将您的环境变量 添加到您的 turbo.json
中,如果您使用它们来构建您的应用程序。