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

Discord机器人Command Handler读取命令目录报ENOENT错误

故障根因

代码中使用的./Tomfoolery/属于相对路径,这类路径的解析基准是执行node启动命令时终端所处的工作目录,并非bot.js文件自身的存储目录。即使Tomfoolery目录和bot.js同级,如果你没有切到bot.js所在目录执行启动命令,就会抛出ENOENT目录不存在的错误。
你之前执行的npm rebuild node-sass相关命令和当前故障完全无关:node-sass是CSS预处理依赖,和fs模块的文件读取逻辑没有关联,执行这类命令无法修复路径问题。

修复代码

引入Node内置的path模块,基于__dirname(当前执行的js文件所在目录的绝对路径)拼接目标路径,完全不受启动工作目录的影响:

const fs = require('fs');
const path = require('path');

client.commands = new Collection();
const commandDir = path.join(__dirname, 'Tomfoolery');
const commandFiles = fs.readdirSync(commandDir).filter(file => file.endsWith('.js'));

for (const file of commandFiles) {
    const commandName = file.split('.')[0];
    const command = require(path.join(commandDir, commandName));
    client.commands.set(commandName, command);
}
排查注意点
  • 确认Tomfoolery目录下的命令文件后缀为.js,若使用ES模块规范后缀为.mjs/.cjs需要同步修改filter的匹配规则
  • 若使用pm2、启动脚本等方式运行程序,不需要额外配置工作目录项,上述绝对路径写法可自动适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:36:26