TypeScript执行tsc仅生成空目录不输出.js文件问题咨询
问题原因
编译只生成空目录不输出JS文件,核心是配置和目录结构不匹配:
- 目录结构和
rootDir配置不匹配
从你贴的目录缩进看,controllers文件夹和ts文件夹是平级关系,没有放在ts目录内部。你设置rootDir: "./"(即ts目录)后,TypeScript会默认所有需要编译的源码都必须在rootDir范围内,controllers下的TS文件因为在根目录外不会被编译,但TS会预先根据扫描到的目录结构创建空的输出文件夹。 - 缺少显式编译范围配置,且未排除输出目录
你没有配置include字段明确指定要编译的文件,同时exclude仅排除了node_modules,配合开启的allowJs: true,TS可能误将输出目录的文件识别为待编译输入,触发编译逻辑中断,不生成JS产物。

修复方法
按以下步骤调整即可:
- 调整目录结构,把
controllers文件夹移动到ts目录内,保证所有待编译TS文件都在ts目录下,最终结构:
- 项目根目录 - ts - index.ts - app.ts - controllers - controller.ts - tsconfig.json
src作为输出目录不需要手动创建,编译时会自动生成。
2. 修改tsconfig.json配置,补充include字段、把输出目录加入排除列表,核心配置如下:
{ "exclude": ["node_modules", "../src"], "include": ["./**/*.ts"], "compilerOptions": { "target": "es5", "module": "commonjs", "rootDir": "./", "moduleResolution": "node", "allowJs": false, "outDir": "../src", "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true, "noImplicitAny": true, "strictNullChecks": true, "strictFunctionTypes": true, "strictBindCallApply": true, "strictPropertyInitialization": true, "noImplicitThis": true, "useUnknownInCatchVariables": true, "alwaysStrict": true, "noUnusedLocals": true, "noUnusedParameters": true, "exactOptionalPropertyTypes": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "noUncheckedIndexedAccess": true, "noImplicitOverride": true, "noPropertyAccessFromIndexSignature": true, "allowUnusedLabels": true, "allowUnreachableCode": true, "skipLibCheck": true } }
如果确实需要编译JS文件,保留allowJs: true即可,必须确保../src在exclude列表中。
3. 删除之前生成的空src文件夹,回到ts目录下重新执行tsc命令即可正常输出JS文件。
如果执行后还是没有产物,先运行
tsc --noEmit查看是否存在TS语法/类型错误:如果你的全局TypeScript版本默认开启了noEmitOnError,代码中存在任何错误都会终止文件输出,修复所有报错后再编译即可。
内容的提问来源于stack exchange,提问作者Ilijanovic
相关产品推荐
相关产品推荐

