Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从网页包输出中删除箭头函数_Javascript_Webpack_Internet Explorer 11_Babeljs_Arrow Functions - Fatal编程技术网

Javascript 如何从网页包输出中删除箭头函数

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输出了很好的代码,我怀疑它可能是一个插件,但我不能只是禁用它们进行测试,因为这会破坏构

在通过webpack运行我的代码后,它将继续使用箭头函数。我需要代码在ie11中工作,所以我需要去掉箭头函数

我正在为所有的.js文件使用babel loader

我编写了一个加载程序来检查arrow函数的代码,并在babel加载程序之后运行它,但没有得到任何arrow函数,所以我知道babel的输出很好

我还尝试了babel polyfill和babel插件来转换箭头功能

正如我所知,babel loader输出了很好的代码,我怀疑它可能是一个插件,但我不能只是禁用它们进行测试,因为这会破坏构建

dev中使用的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中修复它

我不知道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)
解决方案 您只需在webpack.config.js中添加
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,以使其正确运行。