Discord.js开发遇Error: ENOTDIR 扫描setWelcome.js文件报错如何解决?
错误原因
你当前的代码逻辑默认commands目录下的所有条目均为子文件夹,但你实际直接将setWelcome.js放在了commands根目录下。代码遍历到setWelcome.js时,会把该文件当成文件夹调用readdirSync读取,自然抛出ENOTDIR(不是目录)的错误。
解决方案
根据你的需求二选一即可:
方案1:不需要子文件夹分类,所有命令直接放在commands根目录
将index.js中命令注册的逻辑替换为以下代码:
// 替换原来的const commandFolders = ... 及后续的for循环部分 const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js')); for (const file of commandFiles) { const command = require(`./commands/${file}`); client.commands.set(command.name, command); }
方案2:保留子文件夹分类逻辑
调整项目目录结构即可:
- 在
commands目录下新建对应分类的子文件夹,例如/commands/settings/ - 将
setWelcome.js移动到新建的子文件夹内
额外注意
你当前的setWelcome.js为空文件,后续需要导出命令的必要属性,否则命令注册阶段会报错,可参考以下基础模板编写:
module.exports = { name: 'setwelcome', // 命令触发名,必须保持唯一 description: '设置服务器欢迎消息', execute(message, args) { // 此处编写命令触发后的业务逻辑 } }
内容的提问来源于stack exchange,提问作者user16982681
相关产品推荐
相关产品推荐

