Discord.js报错:require(...)不是函数,对应文件已存在仍未解决
解决Discord.js机器人启动时的
TypeError: require(...) is not a function报错 问题原因
你的代码在循环加载src/functions下的文件时,默认每个文件都导出了一个可被调用的函数(并传入client参数),但其中至少有一个文件没有以函数形式导出内容,导致require(...)返回的不是函数,调用时触发报错。
解决方案
1. 检查函数文件的导出格式
遍历src/functions所有子文件夹下的.js文件,确保每个文件都按如下格式导出函数:
// 示例:handleEvents.js 正确导出方式 module.exports = (client) => { client.handleEvents = () => { // 你的事件处理逻辑 }; };
如果某个文件不需要接收client参数,或者只是导出常量/对象,要么修改它的导出为函数形式,要么排除这类文件。
2. 给循环添加安全校验(用于定位问题文件)
在加载文件的循环中加入类型判断,既能避免报错,还能打印出有问题的文件路径:
for (const folder of functionFolders) { const functionFiles = fs .readdirSync(`./src/functions/${folder}`) .filter((file) => file.endsWith(".js")); for (const file of functionFiles) { const exported = require(`./functions/${folder}/${file}`); // 仅当导出内容是函数时才调用 if (typeof exported === "function") { exported(client); } else { console.error(`错误:文件 ${folder}/${file} 未导出函数,当前导出内容:`, exported); } } }
运行后终端会输出异常文件的路径,针对性修复即可。
内容的提问来源于stack exchange,提问作者CookieZ
相关产品推荐
相关产品推荐

