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

Discord.js v13引入parse-ms触发ERR_REQUIRE_ESM require不支持ES模块错误

报错原因

你遇到的ERR_REQUIRE_ESM错误是因为parse-ms从3.0.0版本开始改为纯ESM模块,不能在CommonJS规范的项目中使用require()直接导入,而Discord.js v13的项目默认采用CommonJS规范,因此触发了该报错。

解决方案

方案1:直接移除parse-ms依赖(最推荐,无额外安装)

你当前代码仅需要用到剩余秒数,完全可以自行计算,不需要引入这个第三方包:

  • 删除代码中const ms = require('parse-ms')这一行
  • 找到冷却时间计算的代码块,替换原有毫秒转换逻辑:
// 把原有代码
const timeleft = ms(timeout - (Date.now() - begtime))
// 替换为以下内容
const timeleft = {
  seconds: Math.ceil((timeout - (Date.now() - begtime)) / 1000)
}

改完直接就能运行,不需要安装任何依赖。

方案2:降级parse-ms到兼容CommonJS的版本

如果不想修改原有代码逻辑,可以直接安装支持require导入的旧版本:

  • 执行卸载命令:npm uninstall parse-ms
  • 执行安装旧版本命令:npm install parse-ms@2.1.0
  • 原有代码不需要做任何修改,直接运行即可。

方案3:使用动态导入兼容ESM模块

如果需要使用新版parse-ms的全部功能,可以用CommonJS支持的动态导入语法适配:

  • 删掉原来的const ms = require('parse-ms')行
  • 将callback函数改为异步函数:callback: async (message, args) => {
  • 在用到ms函数的位置前新增动态导入逻辑:
if(begtime !== null && timeout - (Date.now() - begtime) > 0) {
  // 动态导入parse-ms
  const { default: ms } = await import('parse-ms')
  const timeleft = ms(timeout - (Date.now() - begtime))
  // 后面的embed代码保持不变
}

额外注意

你当前的代码中没有导入MessageEmbed,运行时会抛出未定义错误,需要在顶部加上导入行:const { MessageEmbed } = require('discord.js'),同时把代码里所有转义的&gt;、&lt;替换为正常的>、<。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:27:01