为何TypeScript文件目录中出现重复的JavaScript文件?
解决TypeScript生成重复.js文件的问题
核心原因排查
你的tsconfig.json里已经设置了"noEmit": true,理论上TypeScript编译器不会生成任何输出文件。出现.js文件大概率是其他工具或命令覆盖了这个配置,或者有额外的编译流程在后台运行。
具体解决步骤
检查实际生效的配置
运行命令tsc --showConfig,查看输出的最终配置里noEmit是否为true。如果不是,说明有其他tsconfig.*.json文件被优先加载,或者启动命令里加了--emit这类覆盖配置的参数。排查额外的编译工具
打开package.json的scripts字段,检查是否有babel、webpack、vite build这类会生成编译文件的命令,或者tsc命令是否附带了--noEmit false这类强制输出的参数。比如"build": "tsc --emit"会直接忽略配置里的noEmit设置。确认ts-node的行为
你的配置启用了ts-node的ESM模式,ts-node默认是在内存中编译执行,不会生成物理文件。但如果启动命令里加了--transpile-only --out-dir ./这类参数,可能会意外生成文件,检查启动脚本里有没有这类配置。清理已生成的文件
找到生成文件的原因并禁用后,运行rm src/**/*.js(Mac/Linux)或del src\**\*.js(Windows)清理已生成的.js文件,避免后续混淆。
调整后的参考配置
如果要确保完全不生成输出文件,保持现有配置的同时,建议添加排除目录规则:
{ "ts-node": { "esm": true, "experimentalSpecifierResolution": "node" }, "compilerOptions": { "target": "ES2020", "module": "NodeNext", "lib": ["es6", "dom"], // 建议添加dom库以支持TSX语法 "allowJs": true, "outDir": "build", "rootDir": "src", "strict": true, "noImplicitAny": true, "esModuleInterop": true, "resolveJsonModule": true, "moduleResolution": "NodeNext", "allowImportingTsExtensions": true, "noEmit": true // 关键配置:禁用编译输出 }, "include": ["src/**/*"], "exclude": ["node_modules", "build"] // 排除不需要编译的目录 }
内容的提问来源于stack exchange,提问作者Novodip Mondal
相关产品推荐
相关产品推荐

