Node环境下TypeScript模块导入失败问题求助
解决Node.js+TypeScript模块导入错误的方案
问题根源
你直接用node main.ts运行TypeScript文件,Node.js本身不支持直接解析TS语法,同时模块导入路径、tsconfig模块配置和运行方式不匹配,导致ES模块加载警告。
快速调试方案(用ts-node直接运行TS)
- 安装ts-node(用于直接运行TypeScript文件):
npm install -D ts-node - 修改
package.json的scripts:{ "scripts": { "main": "ts-node main.ts" } } - 修正
main.ts的导入路径(去掉.js后缀,直接引用TS文件):import testFunction from './testFunction.ts' - 运行命令:
npm run main
生产环境方案(先编译再运行)
- 保持现有
tsconfig.json配置(outDir: "dist"会把编译后的JS文件输出到dist目录) - 修改
package.json的scripts,增加编译步骤:{ "scripts": { "build": "tsc", "main": "npm run build && node dist/main.js" } } - 确保
main.ts的导入路径是.js后缀(TS编译时会自动映射到对应的.ts文件,编译后JS文件的路径是正确的):import testFunction from './testFunction.js' - 运行命令:
npm run main
为什么之前的尝试没用?
- 加
"type":"module"后,tsconfig的module: "commonjs"会和ES模块系统冲突,需要同步把tsconfig的module改成ESNext、moduleResolution改成node16,反而增加复杂度。 - 重命名为
.mjs无法解决Node不识别TS语法的问题,TS必须经过转译才能被Node执行。 - 用
require能运行但无法用TS类型注解,因为Node直接运行ts文件时不会解析TS语法,类型注解会被当作语法错误。
内容的提问来源于stack exchange,提问作者Richard Bridge
相关产品推荐
相关产品推荐

