'Error [ERR_REQUIRE_ESM]: How to use es6 modules in node 12?
From https://2ality.com/2019/04/nodejs-esm-impl.html Node 12 should support es6 modules; however, I just keep getting the error:
Question: How do I make a MVP of using es6 modules in node 12?
package.json
{
"name": "dynamic-es6-mod",
"version": "1.0.0",
"description": "",
"main": "src/index.mjs",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node src/index.mjs"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"globby": "^10.0.1"
}
}
$ node -v
$ 12.6.0
$ npm run start
internal/modules/cjs/loader.js:821
throw new ERR_REQUIRE_ESM(filename);
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /Users/dev/dynamic-es6-mod/src/index.mjs
at Object.Module._extensions..mjs (internal/modules/cjs/loader.js:821:9)
at Module.load (internal/modules/cjs/loader.js:643:32)
at Function.Module._load (internal/modules/cjs/loader.js:556:12)
at Function.Module.runMain (internal/modules/cjs/loader.js:839:10)
at internal/main/run_main_module.js:17:11
Solution 1:[1]
All you have to do is adding the flag --experimental-modules that supports the new es6 import/export statement also the order is important as the following.
"start": "node --experimental-modules src/index.mjs "
Solution 2:[2]
In Node 14 I solved it with workaround.
source of workaround: https://github.com/eslint/eslint/issues/12319#issuecomment-535799024
short summary:
- your root level
package.json
doesn't support ESM - subdirectory does - in
src
directory placepackage.json
with{ "type": "module" }
PS: ESLint team can't solve it easily right now, just because of core design... :(
Solution 3:[3]
The official documentation for the module states, that v2 should be used with require().
There is a work around though. Instead being imported it can be loaded asynchronously:
const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));
Solution 4:[4]
You have to add this line of code in your package.json file "type" : "module"
You will be able to use imports statements instead of require if I get your question correctly.
Your package.json will look as follows:
{
"name": "dynamic-es6-mod",
"version": "1.0.0",
"description": "",
"main": "src/index.mjs",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node src/index.mjs"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"globby": "^10.0.1"
}
}
Solution 5:[5]
You can try with "jest-preset-angular": "11.0.0-rc.3"
.
It works in my case: Angular v13+ and node v16+.
Solution 6:[6]
I had a hell of a time with all this. I'm just posting my solution repo, in hopes it helps someone else.
This imports an ESM dependency (ora) into TypeScript without using babel. https://github.com/jason-henriksen/typescript-with-esm-no-babel-boilerplate
Solution 7:[7]
Use previous or older version of your installed node module. It will work.
Solution 8:[8]
- Go to
package.json
file and write"type":"module"
, above debug like this:
"name": "npmmodule",
"version": "1.0.0",
"main": "index.js",
"type": "module",
- Use
import
instead ofrequire
:
import chalk from 'chalk';
console.log(chalk.blue("hello world"));
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | abdulrahman alaa |
Solution 2 | |
Solution 3 | dk1 |
Solution 4 | karel |
Solution 5 | Dios Vo |
Solution 6 | Jason Henriksen |
Solution 7 | Karthik S |
Solution 8 | Tyler2P |