tsconfig.json 的 include 和 exclude 用于精准划定编译边界,范围越小编译越快;应显式限定源码路径、避免宽泛通配符,并配合 incremental、skipLibCheck 等配置真正提速。

tsconfig.json 中的 include 和 exclude 不是用来“加速构建”的开关,而是用来**精准划定编译边界**——范围越明确、越小,tsc 实际扫描和检查的文件就越少,自然编译更快。关键不是加配置,而是删冗余。
include 要写得具体,避免宽泛通配符
默认行为是包含当前目录下所有 .ts、.d.ts、.tsx 文件(即 "**/*"),这在大型项目中极易拖慢速度。应显式限定源码路径:
- 只写真正需要编译的源码目录,比如
"src/**/*",不写"./**/*"或空数组 - 多个入口时,用数组明确列出,如
["src/**/*", "types/**/*.d.ts"],不依赖隐式覆盖 - 避免使用
"**"根层级匹配(如"**/api/*.ts"),它会触发全盘扫描;优先用确定路径前缀
exclude 必须配合 include 使用,且只剔除 include 内的子集
exclude 只对 include 已覆盖的路径生效,它不是全局过滤器。常见误区是以为写了 "node_modules" 就能跳过所有依赖,其实若 include 没包含它,exclude 也无效——但更关键的是:别让它白干活。
- 只排除
include范围内确实存在的干扰路径,例如"src/test-utils/**"或"src/generated/**" - 不必重复写
"node_modules"—— 它本就是默认排除项;额外写反而增加解析负担 - 避免模糊排除,如
"**/*.spec.ts";改用具体路径"src/**/__tests__/**"或交给构建工具(如 Jest)处理
比 include/exclude 更有效的提速手段
单纯调这两个字段收益有限。真正影响构建速度的,是底层机制:
- 启用
"incremental": true,让 tsc 复用上次编译信息,后续构建快 50% 以上 - 配合
"tsBuildInfoFile"指定增量缓存位置,避免每次写入项目根目录 - 用
"skipLibCheck": true跳过 node_modules 中声明文件的类型检查(绝大多数项目适用) - 开发阶段可临时关闭
"noEmit": true,仅做类型检查,不生成 JS
验证范围是否合理的小技巧
运行 tsc --listFiles,它会打印出实际参与编译的所有文件路径。对照你的 include/exclude 规则,看是否有意外包含(如 config 目录、mock 数据、旧 demo 文件)——这些才是真正拖慢构建的隐形负担。


















