monorepo项目中tsconfig的exclude配置不生效如何解决?
问题核心原因
- 子包的
extends路径配置错误,没有正确继承根目录配置:子包位于my-monorepo/packages/package1/tsconfig.json,向上跳两层就能拿到根目录配置,你写的../../../../../../tsconfig.json已经跳出项目目录,继承完全失效。 - 全局匹配的
include规则会扫到src以外的配置文件:你配置的**/*.ts会匹配当前目录下所有层级的ts文件,包括根目录、子包根目录的jest.config.ts,就算加了exclude也可能因为缓存、引用关系失效。
具体修复方案
1. 修复子包的继承路径
把package1、package2的tsconfig中extends字段修改为:
"extends": "../../tsconfig.json"
2. 收紧include规则,明确只包含源码目录
根目录tsconfig调整:
{ "compilerOptions": { // 保留原有配置不变 }, "include": ["**/src/**/*.d.ts", "**/src/**/*.ts", "**/src/**/*.tsx"], "exclude": ["node_modules", "dist", "**/*.config.ts", "**/*.setup.ts"] }
子包tsconfig调整:
{ "extends": "../../tsconfig.json", "compilerOptions": { // 保留原有配置不变 }, "include": ["src/**/*.d.ts", "src/**/*.ts", "src/**/*.tsx"], "exclude": ["node_modules", "dist", "**/*.config.ts", "**/*.setup.ts"] }
直接指定只匹配src目录下的ts文件,子包根目录、根目录的config文件不会被纳入编译范围,从根源避免匹配到配置文件。
3. 剩余异常排查
如果修改后还是有报错,按以下顺序排查:
- 确认jest相关流程是否使用了单独的ts配置(比如ts-jest指定了tsconfig文件),需要给对应配置也加上相同的exclude规则
- 检查报错的
jest.config.ts是否被其他业务代码主动import,TS的exclude规则对被主动引用的文件不生效 - 重启IDE的TypeScript语言服务清除缓存,VSCode可通过快捷键
Ctrl+Shift+P调出命令面板,执行「TypeScript: Restart TS Server」生效
内容的提问来源于stack exchange,提问作者Cristian Flórez
相关产品推荐
相关产品推荐

