discord.js加载命令时报TypeError:无法读取undefined的'name'属性
错误根因
报错指向command.data.name读取失败,说明require引入对应命令文件后,得到的command对象不存在data属性,所以读取data下的name触发空指针错误。
排查步骤
替换原有加载代码为带调试输出的版本,定位具体出问题的命令文件:
for (const file of commandFiles) { console.log(`当前加载文件: ${file}`); const command = require(`./commands/${file}`); // 提前校验data字段是否存在 if (!command?.data) { console.error(`加载失败:${file} 未导出合法的data属性,已跳过`, command); continue; } client.commands.set(command.data.name, command); }
运行后查看控制台输出的加载失败对应的文件名,针对该文件排查即可。
常见问题及解决方案
- 命令文件导出格式错误:如果近期把命令文件的CommonJS导出
module.exports = { data: ..., execute: ... }改成了ES模块的export default,需要把引入代码改成const command = require(./commands/${file}).default;,或者把命令文件的导出改回CommonJS规范。 - 命令文件漏写/错写data字段:排查对应文件的导出内容,确认存在
data属性且拼写正确(大小写敏感,Data/DATE都不匹配),如果是斜杠命令,需要确保data是SlashCommandBuilder的实例化结果。 - 命令文件存在语法错误:对应文件有语法问题导致require加载后得到空对象,直接单独运行该命令文件即可触发语法报错,修正语法即可。
内容的提问来源于stack exchange,提问作者Len Creemers
相关产品推荐
相关产品推荐

