为什么tsconfig的exclude配置在Nuxt+Nest项目构建时不生效?
可能的原因及对应解决方案如下:
- 配置继承优先级异常
tsconfig.build.json 仅声明了 include 规则,未显式声明 exclude,部分 TypeScript 版本存在继承配置下 include 优先级高于继承的 exclude 规则的bug。你可以手动将"exclude": ["node_modules", ".nuxt", "dist", "client/**/*"]补充到 tsconfig.build.json 中再测试。 - 业务代码导入了node_modules内的TS源文件
如果 server 目录下的代码直接导入了第三方包未编译的 TS 源文件(而非编译后的 JS 产物),或者第三方包的 package.json 配置错误、main/types 字段指向了 TS 源文件,TS 编译器会因为依赖追踪将这些被导入的文件纳入编译范围,此时 exclude 规则不会生效。你可以根据报错的文件路径回溯对应依赖的导入位置,调整导入方式或者替换合规的依赖版本。 - glob匹配规则兼容性问题
旧版本 TypeScript 对node_modules/**/*这类递归通配符的匹配存在bug,你可以尝试将 exclude 中的node_modules/**/*简化为node_modules,TS 默认会识别并排除整个目录。 - --listFiles参数的误判
你当前的编译命令添加了--listFiles参数,该参数会打印所有被 TS 处理的文件,包括类型声明文件,哪怕开启了skipLibCheck也会输出这些文件路径,并不代表 TS 正在编译这些文件。你可以先移除--listFiles参数直接执行编译,确认是否存在真实的编译报错。 - 跨目录导入连带引入问题
你配置的路径别名@/*指向 client 前端目录,如果 server 代码中不小心用别名导入了前端目录的文件,前端文件依赖的 node_modules 内容也会被连带纳入编译范围,你可以在 tsconfig.build.json 的 exclude 中主动添加client/**/*排除前端目录。
内容的提问来源于stack exchange,提问作者Mr. Byte
相关产品推荐
相关产品推荐

