I have a simple file structure for my JS files:
bundle.js
src
|
-- main.js
-- forms
|
-- forms.js
My main.js file looks like this:
let forms = require('./forms/forms');
And the forms.js files looks like this:
export default class Forms {
test = () => {
alert('Forms.test() executed!');
}
}
var forms = new Forms();
forms.test();
This throws the following error:
Hash: a1ed74e596de181cec27
Version: webpack 1.14.0
Time: 21592ms
Asset Size Chunks Chunk Names
./static/js/bundle.js 277 kB 0 [emitted] main
+ 3 hidden modules
ERROR in ./static/js/src/forms/forms.js
Module build failed: SyntaxError: Unexpected token (4:6)
2 |
3 | export default class Forms {
> 4 | test = () => {
| ^
5 | alert('Forms.test() executed!');
6 | }
7 | }
@ ./static/js/src/main.js 4:12-36
It's giving a syntax error about the line where the test() method is defined. I have added the babel-loader and in the main.js file, ES6 code is transpiled and executed correctly.
My webpack.config.js file looks like this:
module.exports = {
entry: './static/js/src/main.js',
output: {
filename: './static/js/bundle.js'
},
watch: true,
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel',
query: {
presets: ['es2015']
}
}
],
}
};
Does the babel-loader not correctly work on the forms.js file or something? I haven't excluded the file or its folder in the config file or anything, so why the syntax error? I know this is valid JS as I've written it in a different project and it worked fine.
Btw, import in the main.js file doesn't work either, while other ES6 features do work? Does that have anything to do with this?
ES Class Fields & Static Properties is not part of ECMASCRECMAScript 2015 / 2016 but a stage 2 proposition.
To use it you need to configure babel to include the
Class properties transform.You can
npm installjust theClass properties transformplugin in yourbabel-loaderquery:Or
npm installthe stage 2 preset and include it as a preset in yourbabel-loaderquery: