如何配置单个tsconfig.json使测试文件生效配置同时不被编译到构建产物
实现方案
完全可以仅用单个根目录 tsconfig.json 满足你的需求,不用在子目录维护多份重复配置,具体操作如下:
配置逻辑
你遇到的核心冲突是:全局 include 既要覆盖测试、工具目录保证编译标识生效,又要在构建时排除这些目录避免被打包,只要拆分「全局语法检查/测试用配置」和「生产构建用配置」即可,共用同一套编译规则。
方式1:直接给构建命令加参数(最省事)
- 先修改根目录
tsconfig.json的include字段,覆盖所有需要识别编译配置的目录:
{ "compilerOptions": { "esModuleInterop": true, // 其余所有公共编译配置、outDir 等输出配置都保留在这里 "outDir": "./dist" }, "include": ["src/**/*", "test/**/*", "tools/**/*"] }
- 调整你的生产构建命令,加参数临时覆盖
include规则,仅编译src目录:
如果原本是直接调用tsc构建,修改为:tsc --include src/**/*
如果是用 vite、webpack、rollup 等打包工具,直接在打包工具的 TS 插件配置里指定仅包含src目录即可,无需修改全局配置。
方式2:新增构建专属配置文件(更易维护)
如果不想每次构建加参数,可以在根目录新增一个 tsconfig.build.json 继承全局配置,仅重写 include 规则:
- 根目录
tsconfig.json配置和方式1一致,include覆盖所有需要的目录 - 新增
tsconfig.build.json:
{ "extends": "./tsconfig.json", "include": ["src/**/*"] }
- 调整构建命令为:
tsc -p tsconfig.build.json
效果验证
- 测试文件、
tools目录文件在 IDE 语法检查、ts-jest执行时,会读取根目录tsconfig.json的全部编译配置,不会再出现esModuleInterop相关告警 - 生产构建时只会编译
src目录的文件到dist目录,不会包含测试、工具目录的内容
内容的提问来源于stack exchange,提问作者JHH
相关产品推荐
相关产品推荐

