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"
}
}
To be able to load an ES module, we need to set “type”: “module” in this file or, as an alternative, we can use the . mjs file extension as against the usual . js file extension. Also, from Node version 12.7.
Cases where it is necessary to use both “require” and “import” in a single file, are quite rare and it is generally not recommended and considered not a good practice. However, sometimes it is the easiest way for us to solve a problem. There are always trade-offs and the decision is up to you.
To include the Require. js file, you need to add the script tag in the html file. Within the script tag, add the data-main attribute to load the module. This can be taken as the main entry point to your application.
Import modules using 'import' keyword - in Node, Deno or the browser. Cheatsheets / JavaScript / General / Modules / ES Modules. As of ES6 (ES2015), JavaScript supports a native module format called ES Modules, or ECMAScript Modules. This is modern way to do modules in JavaScript.
It'll be solved for you. the error Require () of ES modules is not supported occurs because you installed node-fetch version 3 and you can downgrade and install version 2. Your issue will be solved.
The got error " [ERR_REQUIRE_ESM]: require () not supported" occurs because the got package has been converted to be an ESM only package in version 12 , which means that the package cannot be imported with require () anymore.
In a very recent version of nodejs, you can dynamically import an ESM module into a CommonJS module using let fetch = await import ('node-fetch'). Show activity on this post. Thanks for contributing an answer to Stack Overflow!
If your environment supports ES Modules, you should try to convert the require () import to ESM. But this might not work, depending on your setup. Note that if you use TypeScript with version less than 4.6, you should be staying on got version 11.8.3. You can read more about this in this GitHub issue.
The node-fetch
latest version doesn't use the 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 the require()
syntax.
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.
I figured it out. I just had to downgrade node-fetch
to 2.6.6, as the higher versions only use ESM, which caused a lot of errors.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With