Turborepo Monorepo环境下NestJS继承共享tsconfig后构建产物dist目录路径异常的解决方法咨询
解决Turborepo Monorepo中NestJS项目构建产物路径错误的问题
这问题我之前维护Turborepo monorepo时也踩过坑!核心原因是TypeScript解析outDir路径的规则:它是相对于当前tsconfig文件所在的目录来解析的。你的共享nest.json放在packages/tsconfig/下面,所以配置里的"./dist"会指向packages/tsconfig/dist,而不是继承它的nest-app1项目目录。
下面给你两种可靠的解决方案:
方案1:在项目级tsconfig中覆盖outDir(推荐)
直接在每个NestJS项目的tsconfig.json里添加compilerOptions.outDir,明确指定项目自己的输出目录:
// apps/nest-app1/tsconfig.json { "extends": "@myapp/tsconfig/nest.json", "compilerOptions": { "outDir": "./dist" // 这个路径相对于nest-app1的tsconfig,最终指向apps/nest-app1/dist }, "include": ["./src"], "exclude": ["dist", "build", "node_modules"] }
由于你的tsconfig.build.json继承自tsconfig.json,所以不需要额外修改build配置——它会自动继承这个outDir设置。
方案2:修改共享tsconfig,使用动态相对路径
如果不想每个项目重复配置,可以调整共享的nest.json,把outDir设置为基于项目根的相对路径。不过这种方式需要确保每个项目的目录结构一致:
// packages/tsconfig/nest.json { "$schema": "https://json.schemastore.org/tsconfig", "compilerOptions": { // 其他配置保持不变 "outDir": "../../apps/nest-app1/dist" // 直接指向nest-app1的dist目录 // 注意:如果有多个Nest项目,这种方式需要为每个项目单独创建共享配置,灵活性不如方案1 } }
额外的Turborepo配置检查
确保你的turbo.json里的build任务配置正确,让Turborepo在每个项目目录下执行构建:
// turbo.json { "pipeline": { "build": { "dependsOn": ["^build"], "outputs": ["dist/**"] // 告诉Turborepo缓存dist目录的产物 } } }
完成上述修改后,在根目录执行turborepo build,nest-app1的构建产物就会正确生成在apps/nest-app1/dist路径下了。
内容的提问来源于stack exchange,提问作者SebastianG
相关产品推荐
相关产品推荐

