You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ts-node运行.ts文件报未知.ts扩展名及ES模块语法错误如何解决

问题根因

两个报错循环出现是ESM模式与ts-node默认配置不匹配导致的:

  • 保留package.json中"type": "module"配置时,Node.js会默认以ESM规范加载所有.js/.ts文件,但ts-node默认启动的是CommonJS加载器,无法识别ESM模式下的.ts文件扩展名,直接抛出ERR_UNKNOWN_FILE_EXTENSION错误
  • 删除"type": "module"配置后,Node.js会切回CommonJS加载模式,但代码使用了ESM规范的import语法,且安装的chalk v5+是纯ESM包,不支持CommonJS环境,因此抛出Cannot use import statement outside a module错误
可行解决方案

二选一即可,推荐优先用方案1,匹配当前依赖的ESM特性。

方案1:保留原生ESM模式

  • 保留package.json中的"type": "module"配置,不要删除
  • 修改tsconfig.json,补充ts-node的ESM支持配置,修正后的完整配置如下:
{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "moduleResolution": "node",
    "esModuleInterop": true
  },
  "ts-node": {
    "esm": true
  }
}
  • 不要直接用ts-node index.ts命令启动,改用Node自定义加载器参数执行:
node --loader ts-node/esm index.ts

执行后即可正常输出蓝色的Hello world!结果。


方案2:切回CommonJS模式

如果不需要使用ESM特性,可以切回CommonJS规范,注意需要同步降级不支持CommonJS的依赖:

  • 删除package.json中的"type": "module"配置项
  • 卸载当前的高版本chalk,安装支持CommonJS的v4稳定版:
npm uninstall chalk && npm install chalk@4
  • 修改tsconfig.json,将模块规范改为CommonJS,修正后配置如下:
{
  "compilerOptions": {
    "target": "esnext",
    "module": "CommonJS",
    "moduleResolution": "node",
    "esModuleInterop": true
  }
}
  • 直接执行ts-node index.ts即可正常运行代码。

避坑提示:使用ESM模式时不要手动把.ts后缀改为.mjs,会导致ts-node的类型解析失效;如果提示加载器找不到,优先使用项目本地安装的ts-node依赖执行,避免全局版本与项目版本不一致的问题。

内容的提问来源于stack exchange,提问作者martins16321

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 16:27:25