webpack-cli: [Enhancement]: Error [ERR_REQUIRE_ESM]: Must use import to load ES Module
system: macOS node version: 14.2 webpack@4.43.0 webpack-cli@3.3.11
So, i have config file “webpack.config.js”
export default { entry: './i.js', output: { filename: 'bundle.js' } }
in package.json i have “type”: “module”
in i.js i have code
import * as path from 'path';
console.log(path);
so i use cmd
webpack --config webpack.config.js
and got error:
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /Users/x8core/Projects/anyx-cli/webpack.config.js
require() of ES modules is not supported.
In documentation i see. “When using webpack to bundle your application, you can pick from a variety of module syntax styles including ES6”
Why i am getting such error? Am i need to use babel?
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Reactions: 21
- Comments: 28 (9 by maintainers)
Commits related to this issue
- stupid webpack workaround (https://github.com/webpack/webpack-cli/issues/1622) — committed to lubieowoce/reservise-web by lubieowoce 4 years ago
This is absolutely madness
Because you can’t use
import
insidecjs
, please read how it worksThis error happens in webpack 4 because it uses require to include your
webpack.config.js
. When you move to module, webpack is still using require to include yourwebpack.config.js
. Changing the main config towebpack.config.cjs
and importing your module inside of that should work.This uses the function webpack config model but just importing should work.
In the future of webpack 5, webpack-cli 4, there should be native support for
.mjs
or.js
as modules and this “hack” won’t be needed.So, it’s been a while, but my
"type": "module"
project works with fine if I rename the.js
file tocjs
and force--config
as a flag.Previous:
webpack --env.target=docs
(throws errors)New:
webpack --config webpack.config.cjs --env.target=docs
(works)Not exactly the same thing as supporting a
.mjs
configuration for Webpack, but at least I don’t have to stop using module packaging for my project.@nyngwang You’re replying in a issue from mid-2020. It was fixed in
webpack-cli
4.5.0 in February 2021 last year. That’s why this is closed.https://github.com/webpack/webpack-cli/pull/2381
I solved this
by changing the extension of the
webpack.config .js
to.cjs
. It compiles fine, but during runtime I get:I tracked it down to the dynamic import:
import("./lazy.js")
inmain.js
. If I change it to a normalimport
the app runs flawlessly.Here is the repo to reproduce this issue.
Node -v: v14.4.0 Win10
I see, put it in todo, we should fix compatibility with ES in near future, problem in
v8-compile-cache
😞Would
process.env.DISABLE_V8_COMPILE_CACHE = '1'
work?just tried the rename and flag workaround and it doesn’t work for me, i get
SyntaxError: Cannot use import statement outside a module
it might be a version issue? i’ve got a mix here that i’ve carried over from older projects:
moving everything to latest, i get a repeat of an older issue:
Error: Cannot find module 'webpack-cli/bin/config-yargs'
https://github.com/webpack/webpack-dev-server/issues/2029
but if i change my startup script from the old style to the new:
i end up back where i started:
SyntaxError: Cannot use import statement outside a module
it’s not clear where i should go from here. the older style is incompatible with wherever the config-yargs directory was yeeted off to. the newer style is incompatible with import/export statements?
Unfortunately @rockerBOO’s solution does not work for me, the following error occurs: https://github.com/webpack/webpack-cli/issues/1274
I got this error with
webpack -c weback.config.ts
Found solution, some hacky, but works fine, but no v8 cache for config files, but v8 already cache ES modules, so nothing bad
I know this isn’t a solution for everyone, but my workaround was to change my
package.json
’s"type"
from"module"
to"commonjs"
.I’m transforming it into ESM as a post-build hack. 🤷 👀
Solved on our side, but there is bug in
v8-compile-cache
, anyway you can useDISABLE_V8_COMPILE_CACHE webpack --config ./webpack.config.mjs
and all will work fine@clshortfuse You suggestion isn’t working with the latest Webpack (I think).
This is my config:
All fine, the config looks good. Now when I run webpack I get an error:
looks like the latest webpack is running the config file through a custom VM, and not providing the needed ESM callback.
EDIT: Looks like this issue was already described in https://github.com/webpack/webpack-cli/issues/1274 and that was closed in favor of this issue.
Why does Webpack run configs through a VM? Trying to prevent people from hacking on Webpack internals at runtime?