Node.js开发discord.js机器人时导入外部文件数组报错如何解决?
问题原因说明
该问题由两个核心冲突导致:
- Node.js原生ES Module规范要求,导入本地自定义模块时必须携带完整相对路径前缀(
./或../),直接写文件名会被判定为搜索node_modules下的第三方包,因此触发MODULE_NOT_FOUND报错 - 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
相关产品推荐
相关产品推荐

