我将babel与webpack一起使用,我试图使箭头功能与Internet Explorer一起使用,但是我无法使其正常工作。
这是我的 package.json 开发依赖项:
"devDependencies": {
"babel-core": "^6.26.3",
"babel-loader": "^7.1.5",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-preset-env": "^1.7.0",
"webpack": "^3.12.0",
"webpack-cli": "^3.1.0"
}
这是我的webpack.config.js:
module.exports = {
entry: ['./chat.js'],
devtool: 'source-map',
output: {
path: path.resolve(__dirname, "dist"),
filename: "chat.js"
},
module: {
rules: [
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/
}
]
}
};
我正在使用 .babelrc 的插件:
{
"presets": ["env"],
"plugins": ["transform-class-properties"]
}
我不知道自己在做什么错或缺少什么,但是我在Internet Explorer上收到以下语法错误:
DF.fn = () => {
// Content
};
答案 0 :(得分:1)
如果您使用的是Babel 7,则.babelrc
has changed的行为。
我的建议是删除.babelrc
并将配置放入Webpack配置中。
此外,您将需要从配置配置中删除exclude: /node_modules/
,或添加一些条件以不排除任何使用浏览器不兼容代码的库(例如,如果要使用IE,则使用箭头功能)。>
我个人完全删除了exclude
,并没有发现速度或大小下降。
答案 1 :(得分:0)
您必须为构建指定目标浏览器。基于babel-preset-env
,决定需要应用哪些转换。这是docs和配置示例
{
"presets": [
["env", {
"targets": {
"browsers": ["last 2 versions", "safari >= 7"]
}
}]
]
}
和here是指定浏览器集的所有可能方法。
答案 2 :(得分:0)
对于使用 Webpack 5 的用户,您需要在 ouput.environment
配置中指定要转译的功能,如下所述:https://webpack.js.org/configuration/output/#outputenvironment。
我使用的是差异化服务,因此我根据 modern
变量设置了所有标志(仅在为最近的浏览器构建时才设置为 true
,这是 Chrome 的最后 5 个版本和Firefox 以及最近 2 个版本的 Safari、Edge 和 iOS)。
output: {
// ... other configs
environment: {
arrowFunction: modern,
bigIntLiteral: modern,
const: modern,
destructuring: modern,
dynamicImport: modern,
forOf: modern,
module: modern,
},
}