如何从 webpack 输出中删除箭头函数
How to remove arrow functions from webpack output
在 运行 我的代码通过 webpack 之后它包含了箭头函数。我需要代码在 ie11 中工作,所以我需要摆脱箭头功能。
我正在为所有 .js 文件使用 babel-loader。
我写了一个加载器来检查箭头函数的代码,运行它在 babel-loader 之后没有得到任何箭头函数,所以我知道 babel 的输出是好的。
我也试过 babel-polyfill 和 babel 插件运行形成箭头函数。
据我所知,babel-loader 会输出良好的代码,我怀疑它可能是一个插件,但我不能仅仅禁用它们进行测试,因为那样会破坏构建。
开发中使用的Webpack插件:
plugins: [
new webpack.DefinePlugin({
'process.env': require('../config/dev.env')
}),
new webpack.HotModuleReplacementPlugin(),
new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
new webpack.NoEmitOnErrorsPlugin(),
// https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'index.html',
inject: true
}),
// copy custom static assets
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: config.dev.assetsSubDirectory,
ignore: ['.*']
}
])
]
这个问题在prod中也出现了,但是在dev中修复它应该告诉我如何在prod中修复它。
我不知道箭头函数可能来自其他任何地方,所以我希望在本质上获得适用于 ie11 的代码,但是箭头函数来自某个地方,所以它不起作用。
这不是我的代码,所以我不能 post 全部。不过,我可以 post 相关片段,但我不知道问题出在哪里,所以我还不知道相关内容。
你可以使用babel。由于箭头函数是 es6 自带的,所以可以用 babel 转成 es5。此 link 也可以帮助 。
下面给出的 webpack 配置是我用于 babel 的。
module: {
loaders: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
loader: 'babel-loader',
options: {
babelrc: false,
presets: ["@babel/preset-env", "@babel/preset-react","es2015"]
}
}
]
}
我遇到了同样的问题,找到了原因和解决方法。
原因
babel-loader 将 es6 及更高版本的语法转换为 es5。但是,由于转换是由 loader 完成的,转换仅在每个文件被捆绑之前发生。
loader 完成转换后,webpack 开始打包。然而,webpack 在打包文件时并不关心 babel-loader 的目标版本。它只是将文件与默认 ECMA 版本(可能是 es6 或更高版本)的语法捆绑在一起。这就是为什么捆绑的结果包括箭头函数等es6语法的原因。
第一步
- 文件 1 (es6)
- file2 (es6)
- file3 (es6)
装载机工作后
- file1' (es5)
- file2' (es5)
- file3' (es5)
webpack 打包文件后
- 捆绑文件 (es6)
解决方案
您只需在 webpack.config.js 中添加 target: "es5"
即可解决此问题。之后webpack以es5
语法打包文件
// .babelrc
{
"presets": ["@babel/preset-env"]
}
// webpack.config.js
module: {
...
target: "es5", // include this!!
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
}
]
}
在 webpack 5 中:
module.exports = {
target: ['web', 'es5']
}
target
位于配置模式的根部,需要知道它是针对节点还是网络环境
参考文献:
在 运行 我的代码通过 webpack 之后它包含了箭头函数。我需要代码在 ie11 中工作,所以我需要摆脱箭头功能。
我正在为所有 .js 文件使用 babel-loader。
我写了一个加载器来检查箭头函数的代码,运行它在 babel-loader 之后没有得到任何箭头函数,所以我知道 babel 的输出是好的。
我也试过 babel-polyfill 和 babel 插件运行形成箭头函数。
据我所知,babel-loader 会输出良好的代码,我怀疑它可能是一个插件,但我不能仅仅禁用它们进行测试,因为那样会破坏构建。
开发中使用的Webpack插件:
plugins: [
new webpack.DefinePlugin({
'process.env': require('../config/dev.env')
}),
new webpack.HotModuleReplacementPlugin(),
new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
new webpack.NoEmitOnErrorsPlugin(),
// https://github.com/ampedandwired/html-webpack-plugin
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'index.html',
inject: true
}),
// copy custom static assets
new CopyWebpackPlugin([
{
from: path.resolve(__dirname, '../static'),
to: config.dev.assetsSubDirectory,
ignore: ['.*']
}
])
]
这个问题在prod中也出现了,但是在dev中修复它应该告诉我如何在prod中修复它。
我不知道箭头函数可能来自其他任何地方,所以我希望在本质上获得适用于 ie11 的代码,但是箭头函数来自某个地方,所以它不起作用。
这不是我的代码,所以我不能 post 全部。不过,我可以 post 相关片段,但我不知道问题出在哪里,所以我还不知道相关内容。
你可以使用babel。由于箭头函数是 es6 自带的,所以可以用 babel 转成 es5。此 link 也可以帮助
下面给出的 webpack 配置是我用于 babel 的。
module: {
loaders: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
loader: 'babel-loader',
options: {
babelrc: false,
presets: ["@babel/preset-env", "@babel/preset-react","es2015"]
}
}
]
}
我遇到了同样的问题,找到了原因和解决方法。
原因
babel-loader 将 es6 及更高版本的语法转换为 es5。但是,由于转换是由 loader 完成的,转换仅在每个文件被捆绑之前发生。 loader 完成转换后,webpack 开始打包。然而,webpack 在打包文件时并不关心 babel-loader 的目标版本。它只是将文件与默认 ECMA 版本(可能是 es6 或更高版本)的语法捆绑在一起。这就是为什么捆绑的结果包括箭头函数等es6语法的原因。
第一步
- 文件 1 (es6)
- file2 (es6)
- file3 (es6)
装载机工作后
- file1' (es5)
- file2' (es5)
- file3' (es5)
webpack 打包文件后
- 捆绑文件 (es6)
解决方案
您只需在 webpack.config.js 中添加 target: "es5"
即可解决此问题。之后webpack以es5
// .babelrc
{
"presets": ["@babel/preset-env"]
}
// webpack.config.js
module: {
...
target: "es5", // include this!!
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
}
]
}
在 webpack 5 中:
module.exports = {
target: ['web', 'es5']
}
target
位于配置模式的根部,需要知道它是针对节点还是网络环境
参考文献: