尽管有ES2015预设,Webpack仍可输出ES6代码

时间:2017-09-01 12:12:49

标签: javascript webpack ecmascript-6 babeljs

我正在使用ES6 synthax编写客户端反应代码,并使用webpack使用Babel转换为ES5,并生成一个我发送给浏览器的包。

它在Chrome上运行良好。但是,我最近在Safari 9.x上尝试了我的捆绑包,它失败了: SyntaxError: Unexpected keyword 'const'. Const declarations are not supported in strict mode. 仔细检查后,我注意到bundle.js中的这段代码导致了错误:

// customized for this use-case
const isObject = x =>
    typeof x === 'object' &&
    x !== null &&
    !(x instanceof RegExp) &&
    !(x instanceof Error) &&
    !(x instanceof Date);

我认为webpack应该消除ES6代码(因为我使用es2015预设)所以我很惊讶const和箭头功能仍然在束。 为什么ES6代码仍在我的包中?有没有办法让我把webpack转换成ES5?

这里是我的webpack.config.js片段,我认为它已经完成了删除这个synthax的工作,但没有:

module: {
  loaders: [{
    test: /\.jsx?/,
    include: APP_DIR,
    loader: 'babel-loader',
    query: {
      presets: ['es2015', 'react', 'stage-2'] //, 'react-hmre']
    }
  }

1 个答案:

答案 0 :(得分:1)

经过多次研究和调查后发现,一个节点模块,snakecase-keys,是使用ES6 synthax构建的。由于我的webpack仅针对我的静态目录而不是我的节点模块,因此它没有得到Babel'

这解决了它:

module: {
      loaders: [{
        test: /\.jsx?/,
        // exclude: /(node_modules|bower_components)/,
        include: [APP_DIR, /node_modules\/snakecase-keys/],
        loader: 'babel-loader',
        query: {
          presets: ['es2015', 'react', 'stage-2'] //, 'react-hmre']
        }
      }]
}