SWC未编译Prisma目录致Nest.js项目运行报错求助
SWC 不编译同级 Prisma 目录的原因及解决方法
核心原因
- NestJS CLI 编译范围限制:使用
nest start -b swc时,Nest CLI 默认仅将src目录作为编译目标,不会自动处理同级的prisma目录。而默认 TypeScript 编译器(tsc)可能因未设置include时的隐式规则,或 Nest CLI 对 tsc 的特殊处理,自动纳入prisma目录的文件。 - TSConfig 未明确指定编译范围:当前
tsconfig.json缺少include字段,SWC 会严格遵循 TSConfig 的规则,若未明确包含prisma/**/*,则不会处理该目录下的 TypeScript 文件。 - SWC 配置未扩展编译路径:
.swcrc中未配置额外的编译入口或路径规则,无法告知 SWC 需要处理prisma目录下的文件。
解决方法
方法1:修改 TSConfig 包含 Prisma 目录
在 tsconfig.json 和 tsconfig.build.json 中添加 include 配置,确保 SWC 识别需要编译的文件范围:
{ "compilerOptions": { // 保留现有配置... }, "include": ["src/**/*", "prisma/**/*"], "exclude": ["node_modules", "dist"] }
修改后重新运行 nest start -b swc,SWC 会同时编译 src 和 prisma 目录,保持原结构输出到 dist。
方法2:直接使用 SWC CLI 编译
绕过 Nest CLI 的默认限制,直接调用 SWC CLI 编译目标目录:
更新 package.json 的脚本:
"scripts": { "build:swc": "swc src prisma -d dist", "start:swc": "dotenv -e .dev.env -- bun run dist/main.js" }
执行 npm run build:swc 会将 src 和 prisma 目录的文件编译到 dist 下,保持同级结构;npm run start:swc 启动编译后的项目。
方法3:调整 Nest CLI 配置
若需继续使用 nest start -b swc,可在 nest-cli.json 中配置 rootDirs 扩展根目录范围:
{ "$schema": "https://json.schemastore.org/nest-cli", "collection": "@nestjs/schematics", "sourceRoot": "src", "compilerOptions": { "rootDirs": ["src", "prisma"], "builder": "swc", "typeCheck": true } }
同时确保 TSConfig 的 include 包含 prisma/**/*,这样 Nest CLI 会引导 SWC 处理指定的根目录文件。
内容的提问来源于stack exchange,提问作者MaHdi
相关产品推荐
相关产品推荐

