You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加jest.config.ts导致NestJS项目构建目录结构异常

问题分析与解决方案

核心原因

  1. 未明确编译范围:你的tsconfig.json缺少include字段,默认会编译所有未被exclude的.ts文件,包括../lib目录下的内容,导致dist/common异常出现。
  2. 未指定编译根目录:未设置compilerOptions.rootDir时,TypeScript会自动计算根目录,若存在潜在的非src目录输入文件(即使被exclude,部分场景下仍会影响根目录计算逻辑),会导致编译后保留src目录层级,出现dist/src/main.js的结构。
  3. Jest扫描范围过大:jest.config.ts中roots: ['<rootDir>/']会让Jest扫描整个backend目录,虽不直接影响tsc编译,但可能引发路径解析的间接冲突。

具体修复步骤

1. 修改tsconfig.json

添加include字段限定编译范围,并明确rootDir:

{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "target": "ES2021",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "rootDir": "./src", // 新增:指定编译根目录为src
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": false,
    "noImplicitAny": false,
    "strictBindCallApply": false,
    "forceConsistentCasingInFileNames": false,
    "noFallthroughCasesInSwitch": false,
    "paths": {
      "@/*": ["src/*"],
      "@lib/*": ["../lib/*"]
    }
  },
  "include": ["src/**/*"], // 新增:只编译src下的文件
  "exclude": ["node_modules", "dist", "**/*spec.ts", "jest.config.ts"] // 简化jest.config.ts的排除规则
}

2. 调整jest.config.ts的扫描范围

缩小Jest的扫描范围,只关注src目录下的测试文件:

import { Config } from 'jest';

const config: Config = {
  verbose: true,
  preset: 'ts-jest',
  moduleFileExtensions: ['js', 'ts'],
  moduleNameMapper: {
    '@/(.*)': '<rootDir>/src/$1',
  },
  transform: {
    '^.+\\.(t|j)s$': 'ts-jest',
  },
  collectCoverageFrom: ['src/**/*.(t|j)s'], // 限定覆盖率收集范围
  coverageDirectory: './coverage',
  testEnvironment: 'node',
  testRegex: '.*\\.spec\\.ts$',
  rootDir: '.',
  roots: ['<rootDir>/src'], // 修改:只扫描src目录
};

export default config;

3. 确认构建命令

确保backend/package.json中的build命令仍使用原生tsc,而非ts-jest相关命令:

"scripts": {
  "build": "tsc",
  "test": "jest"
}

4. 清理并重新构建

删除旧的dist目录,重新执行构建:

rm -rf dist && npm run build

调整后,编译后的dist结构会恢复为添加jest.config.ts前的状态:直接在dist根目录下生成auth、users、main.js等文件,不会出现dist/src和dist/common的异常结构。

内容的提问来源于stack exchange,提问作者Northern Bottlenose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:14:53