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

运行discord.js机器人出现ERR_UNSUPPORTED_ESM_URL_SCHEME错误

解决Node.js ESM加载错误:ERR_UNSUPPORTED_ESM_URL_SCHEME(Windows环境)

错误场景

执行命令node --experimental-json-modules bot.js运行Discord.js机器人时,触发以下错误:

Slash Commands (Global) started refreshing app.
node:internal/errors:490
    ErrorCaptureStackTrace(err);
    ^

Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file and data are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
    at new NodeError (node:internal/errors:399:5)
    at throwIfUnsupportedURLScheme (node:internal/modules/esm/resolve:1059:11)
    at defaultResolve (node:internal/modules/esm/resolve:1135:3)
    at nextResolve (node:internal/modules/esm/loader:163:28)
    at ESMLoader.resolve (node:internal/modules/esm/loader:838:30)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18)
    at ESMLoader.import (node:internal/modules/esm/loader:525:22)
    at importModuleDynamically (node:internal/modules/esm/translators:110:35)
    at importModuleDynamicallyCallback (node:internal/process/esm_loader:35:14)
    at client.handleEvents (file:///C:/Users/kefaz0r/Desktop/abb/src/functions/handleEvents.js:6:32) {
  code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'
}

Node.js v18.14.0

解决方案

1. 修正动态导入的路径格式

错误根源是handleEvents.js第6行的动态导入使用了Windows原生绝对路径(如C:\xxx\yyy.js),而ESM模块要求绝对路径必须以file://协议开头。

  • 直接修改为file://格式路径:
    // 错误写法
    import("C:/Users/kefaz0r/Desktop/abb/src/events/xxx.js")
    // 正确写法
    import("file:///C:/Users/kefaz0r/Desktop/abb/src/events/xxx.js")
    
  • 优先使用相对路径(更适配跨平台):
    从handleEvents.js所在的src/functions目录出发,用相对路径指向事件文件:
    import("../events/xxx.js")
    

2. 确认package.json的ESM配置

确保项目根目录的package.json中已添加"type": "module",明确告诉Node.js以ESM模式处理所有文件:

{
  "type": "module",
  // 其他项目配置...
}

3. 动态生成合规的ESM路径

如果需要通过变量拼接路径,使用Node.js的URL类生成符合要求的file://格式路径:

import { fileURLToPath } from 'url';
import { dirname, resolve } from 'path';

const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);

// 生成合规路径并执行导入
const eventPath = new URL(resolve(__dirname, '../events/xxx.js')).href;
await import(eventPath);

验证

修改完成后,重新执行node --experimental-json-modules bot.js,确认错误不再出现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:35:20