我正在使用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']
}
}
答案 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']
}
}]
}