NestJS项目TypeScript构建文件生成目录异常:/dist而非/dist/src
解决NestJS+TypeScript 3.x构建后src内容不生成到dist/src的问题
问题原因
TypeScript 3.x对rootDir配置的处理逻辑比2.x更严格。在2.x中,即便未显式指定rootDir,TypeScript也会默认保留源文件的目录结构;但3.x开始,若未设置rootDir,编译器会自动推断根目录,导致所有编译后的文件直接输出到outDir的根目录,而非保留src层级。
解决方案
修改tsconfig.json,在compilerOptions中添加rootDir配置,明确指定源文件的根目录为./src,确保编译时保留原目录结构:
修改后的tsconfig.json
{ "compilerOptions": { "module": "commonjs", "declaration": true, "removeComments": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "allowSyntheticDefaultImports": true, "target": "es2017", "sourceMap": true, "outDir": "./dist", "rootDir": "./src", // 新增这一行 "baseUrl": "./", "incremental": true, "skipLibCheck": true, "strictNullChecks": false, "noImplicitAny": false, "strictBindCallApply": false, "forceConsistentCasingInFileNames": false, "noFallthroughCasesInSwitch": false }, "watchOptions": { "watchFile": "fixedPollingInterval", "watchDirectory": "useFsEvents", "fallbackPolling": "dynamicPriority", "synchronousWatchDirectory": true, "excludeDirectories": [ "**/node_modules", "dist" ] } }
验证配置
保持nest-cli.json的现有配置不变(已正确设置sourceRoot: "src"),重新执行构建命令:
npm run build
此时src目录下的文件会被编译并镜像到dist/src目录中,恢复到TypeScript 2.x时的输出结构。
补充说明
rootDir的作用是告诉TypeScript编译器,所有需要编译的源文件都位于该目录下,编译时会保留该目录下的子结构,并将其映射到outDir中。- 若你的项目存在多个源目录,可使用
rootDirs配置(数组形式)来指定多个根目录,但单源目录场景下rootDir足够解决问题。
内容的提问来源于stack exchange,提问作者doodada
相关产品推荐
相关产品推荐

