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

如何配置单个tsconfig.json使测试文件生效配置同时不被编译到构建产物

实现方案

完全可以仅用单个根目录 tsconfig.json 满足你的需求,不用在子目录维护多份重复配置,具体操作如下:

配置逻辑

你遇到的核心冲突是:全局 include 既要覆盖测试、工具目录保证编译标识生效,又要在构建时排除这些目录避免被打包,只要拆分「全局语法检查/测试用配置」和「生产构建用配置」即可,共用同一套编译规则。

方式1:直接给构建命令加参数(最省事)

  1. 先修改根目录 tsconfig.json 的 include 字段,覆盖所有需要识别编译配置的目录:
{
  "compilerOptions": {
    "esModuleInterop": true,
    // 其余所有公共编译配置、outDir 等输出配置都保留在这里
    "outDir": "./dist"
  },
  "include": ["src/**/*", "test/**/*", "tools/**/*"]
}
  1. 调整你的生产构建命令,加参数临时覆盖 include 规则,仅编译 src 目录:
    如果原本是直接调用 tsc 构建,修改为:
    tsc --include src/**/*
    如果是用 vite、webpack、rollup 等打包工具,直接在打包工具的 TS 插件配置里指定仅包含 src 目录即可,无需修改全局配置。

方式2:新增构建专属配置文件(更易维护)

如果不想每次构建加参数,可以在根目录新增一个 tsconfig.build.json 继承全局配置,仅重写 include 规则:

  1. 根目录 tsconfig.json 配置和方式1一致,include 覆盖所有需要的目录
  2. 新增 tsconfig.build.json:
{
  "extends": "./tsconfig.json",
  "include": ["src/**/*"]
}
  1. 调整构建命令为:
    tsc -p tsconfig.build.json

效果验证

  • 测试文件、tools 目录文件在 IDE 语法检查、ts-jest 执行时,会读取根目录 tsconfig.json 的全部编译配置,不会再出现 esModuleInterop 相关告警
  • 生产构建时只会编译 src 目录的文件到 dist 目录,不会包含测试、工具目录的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:24:03