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

Windows下Node.js 20.10出现ERR_UNSUPPORTED_ESM_URL_SCHEME错误求助

解决Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]问题

1. 修正Node执行命令的路径格式

从报错信息里的执行命令可以看到,你输入的路径C:Users\user\documents\projects\Discord-Bot-TTS-STT\index.js缺少了盘符后的反斜杠,导致Node将C:识别成了不支持的URL协议。

解决方式:

  • 切换到项目根目录(C:\Users\user\documents\projects\Discord-Bot-TTS-STT),直接运行:
    node index.js
    
  • 如果必须使用完整路径,要确保路径格式正确并加上引号:
    node "C:\Users\user\documents\projects\Discord-Bot-TTS-STT\index.js"
    

2. 确保ES模块配置正确

你使用了import语法,需要告诉Node.js这是ES模块而非CommonJS模块:

  • 在项目根目录的package.json中添加"type": "module"字段,如果没有package.json,先运行npm init -y生成,修改后的package.json示例:
    {
      "name": "Discord-Bot-TTS-STT",
      "version": "1.0.0",
      "type": "module",
      "dependencies": {
        "discord.js": "^14.14.1",
        "dotenv": "^16.3.1"
      }
    }
    

3. 验证文件导入路径

确认commands.js文件确实和index.js在同一目录下,文件名大小写保持一致(Windows系统虽不区分大小写,但避免潜在问题)。

4. 关于require和pathToFileURL的替代方案

如果需要混用CommonJS和ES模块,可通过createRequire实现:

import { Client, GatewayIntentBits, Events } from 'discord.js';
import { createRequire } from 'module';
import dotenv from 'dotenv';

const require = createRequire(import.meta.url);
const { registerCommands, loadCommands } = require('./commands.js');

// 后续代码保持不变
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMembers,
    GatewayIntentBits.GuildMessages,
    GatewayIntentBits.MessageContent,
    GatewayIntentBits.GuildVoiceStates,
  ],
});

registerCommands();

client.on(Events.InteractionCreate, async (interaction) => {
  loadCommands(interaction)
});

dotenv.config();
client.login(process.env.DISCORD_TOKEN);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:14:56