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

Discord.js V13加载slash commands报错ENOENT 找不到slash_commands目录求助

问题原因

报错ENOENT: no such file or directory, scandir './slash_commands'是Node.js找不到你代码中指定的slash_commands目录导致的,直接原因是路径不匹配,可按以下步骤排查修复:

修复方案
  • 第一步:核对项目目录结构
    你当前的项目根目录是报错信息里的C:\Users\codiene wrld\Desktop\dream(也就是index.js所在的目录),必须在这个目录下新建名为slash_commands的文件夹,注意名字完全匹配,不能有大小写偏差、多字少字,也不要放到handlers等其他子目录里。
    同时你的加载逻辑是先读slash_commands下的子文件夹,再读取子文件夹里的js命令文件,所以不要直接把命令js文件放到slash_commands根目录,要在里面再建分类子文件夹(比如工具类、管理类),把命令文件放到对应子文件夹中。

  • 第二步:替换为绝对路径避免工作目录偏差
    你代码中用的./开头的相对路径是相对于Node启动时的工作目录的,如果不是在项目根目录下启动脚本就会触发路径错误,建议用__dirname拼接绝对路径,不受启动位置影响,修改代码对应部分即可:

const { readdirSync } = require("fs"),
path = require("path"),
ascii = require("ascii-table");

let table = new ascii("Commands");
table.setHeading("Slash Commands", "Load status");

module.exports = (client) => {
        // 替换为绝对路径读取slash_commands目录
        const slashRoot = path.join(__dirname, "../slash_commands");
        readdirSync(slashRoot).forEach(dir => {
            const cmdPath = path.join(slashRoot, dir);
            const commands = readdirSync(cmdPath).filter(file => file.endsWith(".js"));
    
            for (let file of commands) {
                let pull = require(path.join(cmdPath, file));

                client.slash_commands.set(pull.data.name, pull);
                table.addRow(file, '✅');
            
                if (pull.aliases && Array.isArray(pull.aliases)) pull.aliases.forEach(alias => client.aliases.set(alias, pull.data.name));
            }
        });
        // 输出加载结果表格
        console.log(table.toString());
}

额外修正了原代码的潜在问题:斜杠命令的名称存储在pull.data.name字段,原别名设置里写的pull.name是错误取值,上述代码已同步调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:33:01