2017-09-01 76 views
1

我正在用ES6 synthax编写客户端反应代码,并已使用webpack使用Babel转换成ES5,并生成一个我发送给浏览器的包。Webpack尽管ES2015预设输出ES6代码

它在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'] 
    } 
    } 
+0

你的测试有而不是'$'。也许试试这个测试:test:/\.jsx$/, –

+0

尝试测试:/\.jsx?$/, – Imran

+0

@Imran我不认为这是我写的函数,它必须是一个库或webpack。 @Niels我有'?'允许.js和.jsx文件被webpack处理 –

回答

0

多少头后刮伤和调查事实证明,一个节点模块,蛇形键,使用ES6合成器构建。由于我的WebPack只针对我的静态目录,而不是我的节点模块也没有得到Babel'd

这个固定:“?”

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