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

Discord.js部署至Heroku时抛出embed author name类型异常

问题根因

这个报错的核心诱因是Heroku环境实际运行的discord.js版本与本地不一致,v12及更早版本的MessageEmbed.setAuthor() 方法不支持对象格式传参。
你判断版本一致的结论存在偏差,通常是两个环节疏漏导致的:

  • 本地node_modules存在版本缓存,实际运行的是支持对象传参的v13/v14版本,但package.json中声明的discord.js版本范围(带^前缀的松散版本声明)可以匹配到v12最终稳定版,Heroku全新拉取依赖时就会安装v12版本
  • 没有将本地的依赖锁定文件(package-lock.json/yarn.lock)提交到Git仓库,Heroku安装依赖时不会对齐你本地的精确依赖版本,只会拉取符合package.json版本范围的包

你之前两次排查没有解决问题,是因为排查方向完全错了:

  • 你只修改了传入对象内部的name字段为固定字符串,但传给setAuthor的第一个参数整体还是对象类型,v12版本的setAuthor会直接把第一个入参当成name值做类型校验,对象不是字符串,必然报错
  • 你给对象内的name字段调用toString()强转,也没有改变第一个入参是对象的事实,类型校验在读取入参的第一时间就会触发,根本不会解析对象内部的属性
验证方法

在本地终端执行以下命令,查看Heroku环境实际安装的discord.js版本:

heroku run npm list discord.js

如果输出的版本号为12.x.x,即可完全确认问题根因。

修复方案

两种方案选其一即可:

  • 方案1(兼容性最好,推荐):适配位置传参格式,修改setAuthor的调用方式,改完的代码在v12/v13/v14版本discord.js下都能正常运行:
const error_embed = new Discord.MessageEmbed()
  .setColor('#c00be0')
  .setTitle("To use this command please mention a user")
  // 传参顺序:name, iconURL, 跳转链接(无需求可省略)
  .setAuthor(msg.author.tag + ' ', msg.author.avatarURL())
  • 方案2:锁定依赖版本和本地完全一致。将package.json中discord.js的版本号前的^、~等松散版本符号删除,写死精确版本号(和你本地运行的版本一致),同时将本地生成的package-lock.json提交到Git仓库,重新部署即可。如果之前开了Heroku依赖缓存,可以先执行heroku config:set NODE_MODULES_CACHE=false关闭缓存,避免旧版本依赖残留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:45:43