使用ts-node运行discord.js的deploy-commands.ts时提示无法找到discord-api-types模块的问题求助
解决discord.js部署命令时的MODULE_NOT_FOUND错误
我来帮你搞定这个问题!你遇到的Cannot find module 'discord.js/node_modules/discord-api-types'错误,核心原因是导入路径不规范,再加上代码里还有个容易忽略的小问题,咱们一步步来修复:
1. 修复错误的Routes导入语句
你当前代码里的导入写法是:
import { Routes } from "discord.js/node_modules/discord-api-types";
这种直接硬编码依赖包内部嵌套路径的方式不符合Node.js模块解析规则——哪怕你本地文件夹里确实存在这个文件,模块解析器也不会按照这个逻辑去查找,自然会触发找不到模块的错误。
因为你已经在package.json里直接安装了discord-api-types,而且discord.js v13也内置了Routes的导出,你有三种正确的导入方式可选:
方式一:直接从discord-api-types导入(推荐,匹配API版本)
import { Routes } from "discord-api-types/v9";
指定v9版本能和你代码里REST({version: '9'})的配置保持一致,避免版本兼容问题。
方式二:从discord.js直接导入
discord.js v13已经把Routes作为自身导出的一部分,你可以直接引用:
import { Routes } from "discord.js";
方式三:从@discordjs/rest导入
@discordjs/rest包本身也包含Routes的定义,适合和REST客户端搭配使用:
import { Routes } from "@discordjs/rest";
选其中一种替换掉原来错误的导入语句即可。
2. 修复命令转换的代码错误
你代码里的这一行逻辑有误:
.map(commands => JSON)
这会把每个SlashCommandBuilder实例转换成JSON构造函数,而不是命令所需的JSON结构,会导致后续命令注册失败。正确写法应该是调用实例的toJSON()方法:
.map(command => command.toJSON())
3. 额外排查步骤(若修复后仍报错)
如果替换导入和修复代码后问题依旧,可以试试以下操作:
- 彻底清除旧依赖和锁文件,重新安装:
rm -rf node_modules package-lock.json npm install - 清除Node.js模块缓存:
npm cache clean --force - 检查
tsconfig.json的模块配置,确保module字段设置为CommonJS或ESNext,和你的导入语法匹配。
完成这些步骤后,再运行ts-node deploy-commands.ts应该就能正常注册命令了!
内容的提问来源于stack exchange,提问作者Cameron Mclauglin
相关产品推荐
相关产品推荐

