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
相关产品推荐
相关产品推荐

