Error [ERR_REQUIRE_ESM]: require() of ES Module not supported
回答 3
浏览 31.4万
2021-09-07
我想做一个Discord机器人,它只是说如果有人在游戏中在线的话。
然而,我一直收到这样的信息。
[ERR_REQUIRE_ESM]: require() of ES Module from not supported. Instead change the require of index.js in... to a dynamic import() which is available in all CommonJS modules.
这是我的代码。
module.exports = {
name: 'username',
description: "this is the username command",
async execute(message, args) {
const fetch = require('node-fetch');
if (args.length !== 1) {
return message.channel.send("invalid username wtf")
}
const ign = args[0]
if (ign.length > 16 || ign.length < 3) {
return message.channel.send("invalid username wtf")
}
const uuid = await fetch(`https://api.mojang.com/users/profiles/minecraft/${ign}`).then(data => data.json()).then(data => data.id).catch(err => message.channel.send("error wtf"));
const onlineInfo = await fetch(`https://api.hypixel.net/status?key=${john}&uuid=${uuid}`).then(data => data.json());
if (uuid.length !== 32) {
return;
}
if (onlineinfo.success) {
if (onlineinfo.session.online) {
message.channel.send("they are online")
}
else {
message.channel.send("they are offline")
}
}
else {
message.channel.send("hypixel api bad wtf")
}
}
}
这是我的package.json文件。
{
"name": "discordbot",
"version": "1.0.0",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node main.js"
},
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"discord.js": "^13.0.1",
"node-fetch": "^3.0.0"
}
}
我没有所有的module.exports的东西,我需要那个吗?我只是说export class什么的,这有错吗?
- pabrams 2021-11-25
但我认为只有在你没有将文件重命名为.mjs的情况下,才应该使用
"type": "module",
。
- Sandburg 2022-07-15
3 个回答
#1楼
得票数 61
node-fetch
最新版本没有使用require()
语法来导入软件包。你需要到你的package.json
里输入
{
"type": "module",
}
来使用import
语法和导入node-fetch
,但这样你就不能对任何其他包使用require
。你只需要用import
语句来工作。
我在我的代码中的另一个文件中使用了require(),那么它怎么会在那里起作用呢?
- N-Man 2021-09-07
我已经这样做了,但我还是得到了错误,因为typescript转码器把要求放回去了,在.js中。我怎样才能让它停止这样做呢?
- pabrams 2021-11-25
不起作用,仍然抛出错误[ERR_REQUIRE_ESM]:不支持ES模块的require()。尽管我的代码中已经没有一个require()了。
- FireFuro99 2021-12-17
一旦我把这个添加到我的package.json中,我还能对其他的包使用require吗?
- kd12345 2022-01-09
一样,这并不奏效,因为typescript转码器增加了要求。
- thouliha 2022-07-29
#2楼
得票数 47
我想明白了。我只是不得不把node-fetch
降级到2.6.6,因为更高的版本只使用ESM,这导致了很多错误。
当我尝试这样做的时候,我从typescript得到了编译错误,比如它不能导入node-fetch,不能找到node-fetch,不能找到node-fetch的类型定义,等等等等......然后如果我添加了类型定义,它说我不需要这些......typescript和node到底是怎么了?
- pabrams 2021-11-25
然后,你需要像这样导入
import * as fetch from 'node-fetch';
- Joe Keene 2022-05-04
仍然有效。仍然很笨。
- Michael 2022-07-25
这太愚蠢了。 为什么不导入 require 只是不能很好地协同工作...
- Quinten Cabo 2022-08-18
#3楼
已采纳
得票数 33
node-fetch
v3最近停止了对require
导入方式的支持,转而使用ES模块。你现在需要使用ESM导入,比如。
import fetch from "node-fetch";
在你的文件的顶部。
我已经这样做了,但并没有什么帮助。
- pabrams 2021-11-25
一个有福气的答案。我抓耳挠腮了30分钟,才偶然发现这个答案,解决了我的问题。谢谢你!
- priyamtheone 2022-09-05
错误:"Cannot use import statement outside a module"
- WebDev-SysAdmin 2022-11-06