现有Node.js项目引入少量TS文件后无法启动服务器
问题:Node.js项目增量迁移TypeScript时出现未知文件扩展名错误
我正尝试在现有Node.js项目中引入TypeScript,因项目与Git子模块耦合无法一次性全量转换,故先将api目录下的路由文件转为TS。
我的tsconfig.json配置如下:
{ "compilerOptions": { "target": "ES2016", "module": "ES6", "lib": ["es6"], "allowJs": true, "checkJs": false, "outDir": "dist", "rootDir": ".", "strict": true, "noImplicitAny": true, "esModuleInterop": true, "moduleResolution":"node", }, }
package.json中已配置"type": "module",使用import语法,启动服务器的命令为:
"concurrently \"npx tsc --watch\" \"nodemon -q dist/index.js\""
但出现如下错误:
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for file-path/abc.ts
问题原因及解决办法
这个错误的核心是未转换的JS文件直接导入了.ts源文件,Node.js无法识别.ts扩展名的模块,它只能处理编译后的.js文件。以下是具体修复方案:
- 修正导入路径:检查所有JS文件(比如入口文件
index.js),把导入api/xxx.ts的语句改成导入dist/api/xxx.js,确保指向tsc编译后的产物文件。 - 优化tsconfig配置:当前
rootDir设为.会导致整个项目文件都被编译到dist,容易混淆原JS和编译产物。建议只指定需要转换的目录:"rootDir": "./api", // 仅编译api目录下的TS文件 - 验证编译结果:先手动执行
npx tsc,检查dist目录下是否生成了对应.js文件,确认路径和导入语句匹配。 - 调整nodemon配置(可选):如果nodemon仍有异常,新增
nodemon.json文件:
启动命令改为:{ "watch": ["dist"], "ext": "js", "exec": "node dist/index.js" }"concurrently \"npx tsc --watch\" \"nodemon -q\""
内容的提问来源于stack exchange,提问作者Mehul Chaturvedi
相关产品推荐
相关产品推荐

