Javascript 如何从网页包输出中删除箭头函数
在通过webpack运行我的代码后,它将继续使用箭头函数。我需要代码在ie11中工作,所以我需要去掉箭头函数 我正在为所有的.js文件使用babel loader 我编写了一个加载程序来检查arrow函数的代码,并在babel加载程序之后运行它,但没有得到任何arrow函数,所以我知道babel的输出很好 我还尝试了babel polyfill和babel插件来转换箭头功能 正如我所知,babel loader输出了很好的代码,我怀疑它可能是一个插件,但我不能只是禁用它们进行测试,因为这会破坏构建 dev中使用的Webpack插件:Javascript 如何从网页包输出中删除箭头函数,javascript,webpack,internet-explorer-11,babeljs,arrow-functions,Javascript,Webpack,Internet Explorer 11,Babeljs,Arrow Functions,在通过webpack运行我的代码后,它将继续使用箭头函数。我需要代码在ie11中工作,所以我需要去掉箭头函数 我正在为所有的.js文件使用babel loader 我编写了一个加载程序来检查arrow函数的代码,并在babel加载程序之后运行它,但没有得到任何arrow函数,所以我知道babel的输出很好 我还尝试了babel polyfill和babel插件来转换箭头功能 正如我所知,babel loader输出了很好的代码,我怀疑它可能是一个插件,但我不能只是禁用它们进行测试,因为这会破坏构
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中修复它
我不知道arrow函数可能来自其他任何地方,所以本质上,我希望得到在ie11上工作的代码,但是有些arrow函数来自某个地方,所以它不工作
这不是我的代码,所以我不能全部发布。但是,我可以发布相关的代码片段,但我不知道问题出在哪里,所以我还不知道什么是相关的。您可以使用babel。由于es6附带了箭头函数,因此可以使用babel转换es5。此外,这个链接也有助于提高效率 下面给出的网页配置是我用于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。但是,由于转换是由加载程序完成的,因此转换只在每个文件绑定之前发生。 加载程序完成转换后,webpack开始绑定。然而,webpack在打包文件时并不关心babel loader的目标版本。它只是将文件与默认ECMA版本(可能是es6或更高版本)的语法绑定在一起。这就是捆绑结果包含es6语法(如箭头函数)的原因 初始步骤
- 文件1(es6)
- 文件2(es6)
- 文件3(es6)
- 文件1'(es5)
- 文件2'(es5)
- 文件3'(es5)
- 捆绑文件(es6)
target:“es5”
,即可处理此问题。之后,webpack以es5语法打包文件
/.babelrc
{
“预设”:[“@babel/preset env”]
}
//webpack.config.js
模块:{
...
目标:“es5”//包括这个!!
装载机:[
{
测试:/\.js$/,,
排除:/node_模块/,
加载器:“巴别塔加载器”,
}
]
}
也许我应该更明确一些,但我使用的是babel,它输出正确的代码,没有箭头函数。”“正如webpacks文档中所写,“加载程序可以链接。链中的每个加载程序都将转换应用于处理过的资源。链以相反的顺序执行。第一个加载程序传递其结果(带有应用转换的资源)到下一个,依此类推。最后,webpack希望链中的最后一个加载程序返回JavaScript。”因此,也许您可以将babel添加到您创建的每个加载程序链中。因此,无论每个加载程序返回什么,它都将由babel翻译。@BjørnMoholt您的节点模块是否由babel传输?也许这就是问题所在。尝试参考下面的链接可能有助于您正确配置Webpack,可能有助于解决此问题。@ysnfrk好主意!尝试过,d太长了,读不下去了。这是非常有用的。这是非常有用的。我花了大约6个小时试图找出为什么Babel用箭头函数包含@ Babel/PrimeEnv,这个答案最终使我意识到这是WebPACK问题,而不是Babel.问题。将target:“es5”
as-config选项设置为webpack,以使其正确运行。