Turborepo如何在apps文件夹或自定义顶级目录嵌套存放应用
Turborepo 嵌套目录项目识别解决方案
Turborepo 本身没有独立的项目扫描规则,完全读取所用包管理器的workspace配置来识别所有项目,出现识别不到嵌套目录的问题,核心是workspace通配符配置或目录结构不符合要求,可按以下方案解决:
方案1:配置多层通配符(原生无侵入方案)
- 修改根目录下的
pnpm-workspace.yaml,将单层级通配符替换为支持多层嵌套匹配的glob规则:packages: # 匹配apps下一级目录的常规应用 - "apps/*" # 匹配apps下任意层级嵌套的项目,支持多层分类目录 - "apps/**" # 若将terraform等基础设施代码放在独立目录,补充对应规则即可 - "infra/*" - "packages/*"注意:仅给实际需要运行的业务项目(如function1、function2)配置
package.json,纯做分类用的中间目录(如apps/functions、apps/functions/more-functions)不要放置package.json,否则会被Turborepo误识别为待执行项目。 - 配置完成后先在根目录执行命令验证pnpm的识别结果:
输出列表中如果能看到所有嵌套存放的项目,再执行turbo相关命令即可正常识别。pnpm ls -r --depth -1 - 若需要定向运行某一类嵌套项目,直接使用turbo自带的filter参数即可,无需手写遍历脚本:
# 运行apps/functions路径下所有项目的dev脚本 turbo dev --filter="./apps/functions/**"
方案2:按资源类型拆分一级目录(百级以上项目推荐)
当项目规模达到上百个serverless函数时,不建议将所有资源都堆放在apps目录下,可按资源类型拆分一级workspace目录,维护成本更低,参考结构如下:
. ├── apps/ # 存放重应用,如官网、管理后台等 │ ├── admin/ │ └── web/ ├── functions/ # 独立存放serverless函数,下按业务域嵌套分类 │ ├── user/ │ │ ├── login/ │ │ └── register/ │ └── order/ │ ├── create/ │ └── refund/ ├── infra/ # 存放terraform等基础设施代码 │ ├── aws/ │ └── alicloud/ ├── packages/ # 存放公共依赖包 │ ├── db-client/ │ └── shared-utils/ ├── pnpm-workspace.yaml └── turbo.json
对应pnpm-workspace.yaml配置:
packages: - "apps/*" - "functions/**" - "infra/*" - "packages/*"
该结构下不同类型资源边界清晰,无需在apps目录下做多层嵌套,定位项目的效率更高。
常见排错点
- glob规则必须加引号,避免部分shell提前解析
**通配符导致匹配失效 - 若配置完成后仍识别异常,先执行
rm -rf node_modules/.cache/turbo清除turbo缓存后重试 - 不要手动写脚本遍历目录执行项目命令,turbo自带的调度、缓存能力比手写脚本执行效率高30%以上,优先使用原生filter能力做项目筛选
内容的提问来源于stack exchange,提问作者SebastianG
相关产品推荐
相关产品推荐

