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

ES模块导入省略扩展名失败求助:./app无法导入但./app.js可行

解决ES模块导入时省略扩展名报错ERR_MODULE_NOT_FOUND的问题

我之前也踩过这个坑,折腾了好一阵才搞明白来龙去脉,给你梳理清楚:

首先核心原因是当package.json里设置了"type": "module"时,Node.js会严格遵循ES模块规范,要求导入路径必须指定完整的文件扩展名——这和Node默认的CommonJS模块系统不一样,CommonJS会自动尝试补全.js、.json这类扩展名,但ES模块不会,这是Node官方的规范要求,和Babel本身无关。

那为什么教程里用./app就能正常导入?大概率是教程里的项目没开启"type": "module",还是用的CommonJS模块系统,或者额外配置了自动补全扩展名的工具。

针对你的情况,有两个可行的解决方案:

方案一:保持使用完整扩展名(最推荐)

就像你现在成功运行的写法import app from "./app.js",这完全符合Node ES模块的规范,没有兼容性问题,也是最省心的做法。

方案二:配置Babel插件自动补全扩展名

如果你实在想省略扩展名,可以借助babel-plugin-module-resolver插件实现:

  1. 先安装插件:
npm install babel-plugin-module-resolver --save-dev
  1. 修改你的babel.config.json,添加插件配置:
{
  "presets": ["@babel/preset-env"],
  "plugins": [
    ["module-resolver", {
      "extensions": [".js", ".json"]
    }]
  ]
}
  1. 之后用@babel/node运行项目时,它会在编译阶段自动为你补全导入路径的扩展名,这样你就能用import app from "./app"了。

另外提一句,你的Node版本v13.60应该是笔误吧?应该是v13.6.0?早期Node的ES模块支持确实有一些细节差异,但核心的扩展名要求是一直存在的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:12:38