I have a React project which uses Webpack as the module bundler, and babel-loader
to transform it into ES5, using the following settings:
module: { rules: [ { test: /\.jsx?$/, exclude: /node_modules/, use: [ { loader: "babel-loader" } ] } ] },
The options are set in a stand-alone .babelrc
file.
Babel 6.13.0 supports ECMAScript modules, which means ECMAScript modules doesn't need to be transformed into CommonJS modules first. To get this behaviour, the documentation says that we should use this setting in our .babelrc
.
{ presets: [["es2015", { "modules": false }], "react"] }
However, when I try to run Webpack using this setting, it comes back with the error:
$ ./node_modules/.bin/webpack /home/d4nyll/foo/bar/webpack.config.babel.js:1 (function (exports, require, module, __filename, __dirname) { import webpack from 'webpack'; ^^^^^^ SyntaxError: Unexpected token import
I'm guessing this is because babel-loader
doesn't act on webpack.config.babel.js
, and so it's not recognising the import
keyword. The error does not appear when { "modules": false }
is removed, but I want that functionality. How can I get Babel to recognise webpack.config.babel.js
?
The following worked for me.
Set .babelrc
to the following:
{ "presets": ["es2015"] }
The .babelrc
settings would apply to the webpack.config.babel.js
file.
Next, change the Webpack configuration to include the options you want applied to your application code.
module: { rules: [ { test: /\.jsx?$/, exclude: /node_modules/, use: [ { loader: "babel-loader", options: { "presets": [["es2015", {"modules": false}], "react"] } } ] } ] },
Just to emphasize, as you probably know: Your error
`Unexpected token import` in `webpack.config.babel.js`...
has nothing to do with the thing you are building, solely with your webpack.config.babel.js
. Despite its name, ES6 is not gonna work without a few things made sure.
1) you don't need any webpack.config.js
, when you have a webpack.config.babel.js
in your project.
2) make sure in your package.json
, you are on Webpack Version 3 or higher for (1) to hold true
3) make sure you have a .babelrc
containing at least env
or es2015
{ "presets": ["env"] }
4) make sure to have the following two installed
npm install babel-cli --save-dev npm install babel-preset-env --save-dev
Respectively babel-preset-es2015
depending on your .babelrc
. (read here why env
is arguably a bit cooler.)
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