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

Discord bot本地运行正常,部署Heroku时报SlashCommand无法实例化错误

问题原因
  • 核心是slash-create依赖的版本兼容性问题:你本地使用的是旧版slash-create,支持直接实例化SlashCommand基类创建命令;Heroku部署时拉取了v5及以上的新版本,该版本禁止直接实例化基类,要求必须通过继承的方式定义命令。
  • 大部分情况是因为你的项目没有锁死依赖版本,package.json中对slash-create的版本声明使用了^/~这类允许跨小版本/大版本升级的标识,导致Heroku安装了不兼容的版本。
修复方案

方案1:锁定依赖版本(无需修改业务代码,最快解决)

  1. 在本地项目根目录执行npm list slash-create,查看本地安装的可用版本号,例如输出为4.10.0。
  2. 打开package.json,将slash-create的版本声明修改为固定版本,比如"slash-create": "4.10.0",删除版本号前的^或~符号。
  3. 重新执行npm install生成新的package-lock.json文件,将修改后的package.json和package-lock.json推送到Heroku重新部署即可。

方案2:适配新版slash-create(推荐,可使用新版功能)

修改报错指向的commands/back.js文件,将直接实例化的写法改为继承基类的写法:

旧版写法示例

const { SlashCommand } = require('slash-create');

module.exports = new SlashCommand({
  name: 'back',
  description: '返回上一级'
}, async (ctx) => {
  // 你的命令执行逻辑
});

新版兼容写法示例

const { SlashCommand } = require('slash-create');

module.exports = class BackCommand extends SlashCommand {
  constructor(creator) {
    super(creator, {
      name: 'back',
      description: '返回上一级'
    });
  }

  async run(ctx) {
    // 你的命令执行逻辑
  }
}

所有命令文件都按上述规则修改后,重新提交代码部署即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:54:00