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

Node.js开发discord.js机器人时导入外部文件数组报错如何解决?

问题原因说明

该问题由两个核心冲突导致:

  1. Node.js原生ES Module规范要求,导入本地自定义模块时必须携带完整相对路径前缀(./或../),直接写文件名会被判定为搜索node_modules下的第三方包,因此触发MODULE_NOT_FOUND报错
  2. package.json配置"type": "module"后,整个项目会默认启用ES Module规范,不再支持CommonJS的require语法,因此原有引入discord.js的require代码失效

可选解决方案

方案一:全项目统一使用ES Module规范

  • 保留package.json中的"type": "module"配置
  • 将原有bot.js中所有用require引入依赖的代码替换为ES Module的import语法,discord.js原生支持ES Module导入:
    // 原写法
    // const Discord = require('discord.js');
    // 替换为
    import * as Discord from 'discord.js';
    // 也可以按需引入需要的模块
    import { Client, GatewayIntentBits } from 'discord.js';
    
  • 修正names.js的导入路径,添加同级目录相对路径前缀:
    // 错误写法
    // import {replies} from "names.js";
    // 正确写法
    import { replies } from "./names.js";
    

方案二:全项目统一使用CommonJS规范(无需修改原有discord.js引入代码)

  • 删掉package.json中的"type": "module"配置,恢复默认CommonJS模式
  • 将names.js的ES Module导出语法替换为CommonJS导出:
    // 原写法
    // export var replies = ['various stuff'];
    // 替换为
    var replies = ['various stuff'];
    module.exports = { replies };
    
  • bot.js中用CommonJS语法引入names.js,同样需要添加相对路径前缀:
    const { replies } = require('./names.js');
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:24:06