使用@slack/webhook遇Axios ERR_REQUIRE_ESM错误求助
解决@slack/webhook引入Axios时的ERR_REQUIRE_ESM错误
问题原因
@slack/webhook 7.x版本内部采用CommonJS的require()语法引入依赖,但Axios 1.6.x已经完全切换为ES模块,CommonJS模块无法直接require ES模块,因此触发ERR_REQUIRE_ESM错误。
解决方案
方案1:降级Axios到兼容版本
Axios 0.27.x版本同时支持CommonJS和ES模块,降级后可解决模块兼容问题:
# npm npm install axios@0.27.2 # yarn yarn add axios@0.27.2
方案2:将项目切换为ES模块模式
在项目根目录的package.json中添加"type": "module",将整个项目标记为ES模块:
{ "type": "module" }
同时把代码中的require改为import:
// 原代码 const { IncomingWebhook } = require('@slack/webhook'); // 修改后 import { IncomingWebhook } from '@slack/webhook';
之后运行项目无需再加-r esm参数,直接执行:
node index.js
方案3:使用动态import替代require(保留CommonJS模式)
如果需要保持项目为CommonJS模式,可通过动态import()加载@slack/webhook:
async function sendSlackNotification() { const { IncomingWebhook } = await import('@slack/webhook'); const webhook = new IncomingWebhook('你的Slack Webhook地址'); await webhook.send({ text: '测试通知' }); } sendSlackNotification().catch(err => console.error('发送失败:', err));
内容的提问来源于stack exchange,提问作者Hayk Sahakyan
相关产品推荐
相关产品推荐

