使用ts-node执行TS文件时无法使用import语句的问题求助
解决ts-node运行TS文件的模块语法错误问题
问题分析
你遇到的两个错误本质是Node.js模块系统与TypeScript编译配置不匹配:
- 无
"type": "module"时,Node默认按CommonJS模块加载文件,但你的TS配置"module": "esnext"会让ts-node转译出ES模块语法(import),导致Node报错“不能在模块外使用import”。 - 添加
"type": "module"后,Node切换为ES模块模式,但它原生不识别.ts扩展名,所以报错“未知文件扩展名.ts”。
解决方案
提供两种可行方案,选一种即可:
方案1:切换为CommonJS模块(快速解决)
修改tsconfig.json的compilerOptions,将模块系统改为CommonJS:
"compilerOptions": { // 其他配置保留 "module": "CommonJS", // 把esnext改成CommonJS "moduleResolution": "node" // 保持不变即可 }
不需要修改package.json,直接运行命令:
ts-node src/foo.ts
方案2:配置ES模块模式下的ts-node(适合坚持用ES模块的场景)
- 确保
package.json中已添加:
"type": "module"
- 修改
tsconfig.json的ts-node配置,启用ES模块支持,同时调整编译选项适配ES模块:
{ "extends": "ts-node/node16/tsconfig.json", "ts-node": { "transpileOnly": true, "files": true, "esm": true, // 新增:启用ES模块支持 "compilerOptions": {} }, "compilerOptions": { // 其他配置保留 "module": "esnext", "moduleResolution": "nodenext" // 改成nodenext,适配ES模块解析规则 }, "include": ["src/**/*"] }
- 运行命令(也可直接用
ts-node src/foo.ts,因为配置里已开启esm):
ts-node --esm src/foo.ts
验证
两种方案修改后,重新运行ts-node src/foo.ts,应该能正常输出hello world并初始化CDK App。
内容的提问来源于stack exchange,提问作者00robinette
相关产品推荐
相关产品推荐

