Discord.js Slash Commands开发遇ENOENT -4058错误求助
解决Discord.js中fs.readdirSync()的ENOENT -4058错误
核心原因
这个错误是Node.js找不到你指定的目录,大概率是相对路径的工作目录不匹配,或者目录结构存在问题。
具体解决步骤
改用绝对路径读取目录
相对路径依赖Node进程的工作目录,nodemon启动时可能和你预期的不一致。用__dirname结合path模块生成绝对路径,彻底解决路径问题:const fs = require('fs'); const path = require('path'); // 生成commands目录的绝对路径 const foldersPath = path.join(__dirname, 'commands'); const commandFolders = fs.readdirSync(foldersPath);__dirname会指向当前脚本文件所在的目录,path.join自动处理不同系统的路径分隔符,确保路径100%正确。核对目录结构和文件名
确认项目里确实存在commands/utility目录,且目录下有合法的.js命令文件。注意文件名和目录名的大小写(Linux/macOS系统区分大小写,Windows不区分,跨环境开发要统一)。检查nodemon的启动方式
确保你是在项目根目录下执行nodemon启动命令,或者在package.json的scripts里明确指定启动文件的路径:"scripts": { "start": "nodemon ./src/index.js" }这样nodemon会以项目根目录作为工作目录,避免路径偏移。
调试路径是否正确
在读取目录前打印路径,确认指向的是正确的位置:console.log('命令目录绝对路径:', foldersPath);如果打印的路径不对,就调整
path.join里的参数,比如如果index.js在src目录下,而commands在项目根目录,就要改成path.join(__dirname, '../commands')。
内容的提问来源于stack exchange,提问作者Arthurgamer Pro
相关产品推荐
相关产品推荐

