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

Discord机器人开发遇ENOENT错误:指定目录不存在,求解决方案

解决Discord机器人启动的ENOENT目录不存在错误

复制教程代码后运行机器人出现以下错误:

node:internal/fs/utils:347
    throw err;
    ^

Error: ENOENT: no such file or directory, scandir './src/functions/${folder}'
    at Object.readdirSync (node:fs:1438:3)
    at Object.<anonymous> (C:\Users\Redux Gamer\Desktop\Js\discord\univenture\src\bot.js:12:30)
    at Module._compile (node:internal/modules/cjs/loader:1155:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1209:10)
    at Module.load (node:internal/modules/cjs/loader:1033:32)
    at Function.Module._load (node:internal/modules/cjs/loader:868:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:22:47 {
  errno: -4058,
  syscall: 'scandir',
  code: 'ENOENT',
  path: './src/functions/${folder}'
}

尝试过以下操作但无效:

npm update
npm install
node node_modules/node-sass/scripts/install.js
npm rebuild node-sass

附上bot.js代码:

require('dotenv').config()
const { token } = process.env
const { Client, Collection, GatewayIntentBits } = require('discord.js')
const fs = require('fs')

const client = new Client({ intents: GatewayIntentBits.Guilds })
client.commands = new Collection()
client.commandArray = []

const functionFolders = fs.readdirSync('./src/functions')
for (const folder of functionFolders) {
    const functionFiles = fs.readdirSync('./src/functions/${folder}').filter((file) => file.endsWith(".js"))
    for(const file of functionFiles) require('./functions/${folder}/${file}')(client)
}

client.handleEvents()
client.handleCommands()
client.login(token)

问题根源

代码里的路径字符串用了单引号,导致模板变量${folder}没有被解析成实际的文件夹名称,而是被当成了路径的一部分,所以Node.js找不到./src/functions/${folder}这个目录。

解决方案

把涉及路径拼接的两行代码里的单引号换成反引号(键盘左上角~键对应的符号),这样模板字符串才能正确解析变量:

for (const folder of functionFolders) {
    // 替换单引号为反引号
    const functionFiles = fs.readdirSync(`./src/functions/${folder}`).filter((file) => file.endsWith(".js"))
    // 替换单引号为反引号
    for(const file of functionFiles) require(`./functions/${folder}/${file}`)(client)
}

修改后重新运行机器人即可,之前执行的npm相关操作和这个问题无关,无需重复执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:45:35