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

使用ES Modules与jsconfig.json配置路径时触发Error [ERR_MODULE_NOT_FOUND]问题求助

解决Node.js ES模块中路径别名的运行时识别与VS Code智能提示问题

你遇到的核心问题是:jsconfig.json的paths配置仅服务于VS Code的IntelliSense智能提示,Node.js的ES模块加载器根本不会读取这个文件,所以运行时必然会出现模块找不到的错误。你之前尝试的Subpath Imports是Node原生支持的方案,但需要和jsconfig.json配合才能同时满足运行和智能提示的需求。

下面是具体的解决步骤:

1. 配置package.json中的Subpath Imports

在package.json中添加imports字段,让Node.js能够解析别名对应的实际文件路径:

{
  "type": "module",
  "imports": {
    "@controllers/*": "./node/controllers/*.js"
  },
  // 保留你原有的其他配置
}

这里的映射是字符串替换逻辑:当你导入@controllers/foo时,Node会自动替换为./node/controllers/foo.js,完美适配ES模块必须指定文件后缀的要求。

2. 调整jsconfig.json匹配Subpath规则

修改jsconfig.json的配置,让VS Code的智能提示能正确关联到实际文件,和Subpath Imports规则保持一致:

{
  "compilerOptions": {
    "target": "es6",
    "module": "ESNext", // 改为ESNext更好适配ES模块语法
    "baseUrl": "./",
    "paths": {
      "@controllers/*": ["node/controllers/*"]
    }
  },
  "exclude": ["node_modules"]
}

把module字段改为ESNext,是为了让VS Code的提示逻辑和Node的ES模块解析逻辑对齐,避免出现提示偏差。

3. 编写正确的导入语句

现在你可以在server.js中这样导入模块,既满足Node运行时解析,又能获得完整的VS Code智能提示:

import { foo } from '@controllers/foo'

补充:为什么之前的Subpath Imports导致智能提示失效?

大概率是你当时没有在jsconfig.json中配置对应的paths规则,VS Code无法识别别名对应的实际文件路径。现在通过同步Subpath和jsconfig的映射规则,就能同时解决运行报错和智能提示失效两个问题。

如果需要更复杂的别名规则(比如跨多级目录的批量映射),也可以使用第三方加载器(如esm-loader-alias),但需要额外安装依赖并在启动Node时指定加载器,不如原生Subpath方案简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:12:48