为什么配置了tsconfig后Typescript仍将`./build`文件识别为输入文件?
问题根因
TS5055报错的核心是Typescript将build目录下已生成的.d.ts文件识别成了编译输入文件,生成输出时路径和输入文件冲突导致的。虽然你配置了exclude: ["build/**/*"],但以下场景会绕过exclude规则:
- 你的
src目录下的代码存在主动导入build目录模块的语句,Typescript会将所有被入口文件引用的文件纳入编译范围,不受exclude限制 - 你手动配置
exclude时覆盖了TS默认排除的node_modules目录,依赖中的引用逻辑可能间接引入了build目录下的文件 - 旧的
build目录残留文件未清理,部分TS版本在增量编译场景下会误将已生成的输出文件识别为输入
排查&解决方案
- 先执行最简验证方案:删除
build目录后重新编译,执行命令:
rm -rf build && yarn tsc
如果编译正常,说明是旧残留文件导致的问题,后续直接将编译脚本调整为预删除build目录即可。
- 如果删除后仍报错,排查
src目录下所有导入语句,确认是否存在引用build目录的代码,可执行下面的命令快速检索:
grep -r "build/" src --include="*.ts"
找到对应导入语句后删除或修正路径即可。
- 上述操作无效的话,把
node_modules加入tsconfig.json的exclude数组,避免依赖中的引用逻辑引入异常文件:
"exclude": [ "**/__tests__/**/*", "build/**/*", "node_modules/**/*" ]
- 若仍未解决,升级Typescript到最新稳定版即可,部分旧版本TS存在
exclude规则不生效的已知bug:
yarn add -D typescript@latest
内容的提问来源于stack exchange,提问作者user578895
相关产品推荐
相关产品推荐

