Webpack在JS文件中引发了一个奇怪的语法错误

时间:2016-12-25 20:53:36

标签: javascript jquery node.js webpack modular-design

我的JS文件有一个简单的文件结构:

bundle.js
src
 |
 -- main.js
 -- forms
       |
       -- forms.js

我的main.js文件如下所示:

let forms = require('./forms/forms');

forms.js文件如下所示:

export default class Forms {
    test = () => {
        alert('Forms.test() executed!');
    }
}

var forms = new Forms();
forms.test();

这会引发以下错误:

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

它给出了定义test()方法的行的语法错误。我添加了babel-loader并在main.js文件中,ES6代码被正确编译和执行。

我的webpack.config.js文件如下所示:

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']
        }
      }
    ],
  }
};

babel-loader是否无法正确处理forms.js文件或其他内容?我还没有排除配置文件中的文件或文件夹或任何东西,那么为什么语法错误?我知道这是有效的JS,因为我已经将它写在一个不同的项目中并且工作正常。

Btw,main.js文件中的import也不起作用,而其他ES6功能有效吗?这与此有关吗?

2 个答案:

答案 0 :(得分:2)

ES Class Fields & Static Properties不是ECMASCRECMAScript 2015/2016的一部分,而是第二阶段的主张。

要使用它,您需要配置babel以包含Class properties transform

npm install查询中只能babel-loader插件{/ 1}}:

query: {
  presets: ['es2015'],
  plugins: ['transform-class-properties']
}

npm install Class properties transform并将其作为预设添加到babel-loader查询中:

query: {
  presets: ['es2015', 'stage-2']
}

答案 1 :(得分:2)

您可以将其定义为常规方法:

export default class Forms {
    test() {
        alert('Forms.test() executed!');
    }
}