Monorepo 开发方式对比多个项目的开发方式已经有很多优异的最佳实践和示例、配套的东西支持,在多个开源项目、大厂实践中落地。其优势和缺点已经有不少其他文章介绍过了,不是本文重点就不单独介绍了。
本文介绍运用 Turborepo 管理 Monorepo
项目。
Turborepo
是目前众多盛行的 Monorepo
管理东西中一种,其优势在于:
- 多使命并行处理
- 更快的增量构建
- 云缓存
- 使命管道
- 根据约定的装备
- …
创立一个新的 Monorepo 项目
运用 create-turbo
创立项目
npx create-turbo@latest
create-turbo
会根据 示例项目 模版来生成项目代码。
创立项目成功后,能够看到提示咱们成功创立了以下项目:
>>> Created a new Turborepo with the following:
apps
- apps/docs
- apps/web
packages
- packages/eslint-config
- packages/typescript-config
- packages/ui
常见的开发约束,咱们一般会将完整的使用放在 apps
目录下,能够同时存在多个使用。将使用依靠或者能够同享代码的部分抽取分装成多个包放在 packages
目录下。
其间的每个项目都有自己的 package.json
,其间能够界说这个项目的运转、打包指令、依靠的包等。在使用 apps/docs
和 apps/web
中,咱们也能够看到他们添加了来自 packages/ui
的依靠,能够运用其供给的组件。
发动使用
turbo.json
中已经帮咱们界说好了一些常用的 pipeline,根据这些装备能够执行不同的使命,能够并行、串行执行多个使命。以本地发动使用示例:
{
"pipeline": {
"dev": {
"cache": false,
"persistent": true
}
}
}
turbo dev
发动某一个使用
turbo dev --filter=docs
打包项目
turbo.json
中界说打包使命,而且界说打包产品地址能够让 turborepo
协助缓存打包使命,后续打包能够充分利用缓存机制加速打包速度。
{
"pipeline": {
"build": {
"outputs": [".next/**", "!.next/cache/**"]
}
}
}
turbo build