Error [ERR_REQUIRE_ESM]: require() of ES Module not supported
Javascriptnode.jsdiscord.jsNode FetchHypixel ApiJavascript Problem Overview
I'm trying to make a Discord bot that just says if someone is online on the game.
However I keep getting this message:
> [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.
This is my code:
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")
}
}
}
This is my package.json file:
{
"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"
}
}
Javascript Solutions
Solution 1 - Javascript
node-fetch
latest version doesn't use require()
syntax to import the package. You need to go to your package.json
and type
{
"type": "module",
}
to use the import
syntax and import node-fetch
, but then you can't use require
for any other packages you need to work with import
statement only.
Or you can use other packages such as Got or Axios which can be imported by require()
syntax.
Solution 2 - Javascript
node-fetch
v3 recently stopped support for the require
way of importing it in favor of ES Modules. You'll need to use ESM imports now, like:
import fetch from "node-fetch";
at the top of your file.
Solution 3 - Javascript
I figured it out. I just had to downgrade node-fetch
to 2.6.1, as the higher versions only use ESM, which caused a lot of errors.