使用babel后,IE中的"符号"未定义

Jur*_*rom 82 reactjs webpack babeljs

我有一个reactjs使用ES6标准编写的应用程序,我用webpack它来构建它.该webpack负载js使用模块babel-loader.具体来说,我使用以下版本的软件包: ??? babel@5.8.34 ??? babel-core@5.8.34 ??? babel-loader@5.4.0 ??? webpack@1.12.6

但是,在构建它之后,IE 10会出现以下错误'Symbol' is undefined.应该不babel应该定义Symbol?是否有任何特定的配置webpackbabel我需要设置才能使其工作?我{stage: 0}在我的配置中使用配置.babelrc.

任何帮助将不胜感激,谢谢!

Łuk*_*asz 92

您可以在代码的入口点要求polyfill,以便与其余的JavaScript捆绑在一起.

一种选择是使用:

require('babel-polyfill');
Run Code Online (Sandbox Code Playgroud)

要么:

import 'babel-polyfill';
Run Code Online (Sandbox Code Playgroud)

所有这些都在文档中解释.

  • 我和这个虫子打了好几个小时!谢谢 (2认同)

Jur*_*rom 64

好吧,我最终发现babel单独没有polyfill.包括脚本<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.6.15/browser-polyfill.min.js"></script>为我解决了这个问题.

  • 是否有一种方法,我只能在HTML中包含这个脚本,如:<! - [if IE]> script(type ='text/javascript').require('babel-core/browser-polyfill.js')<![endif] - > (4认同)

Ali*_*eza 6

好的,我有同样的问题,但在我的情况下完全不同,所以基本上你需要在索引文件中包含脚本,如下所示:

<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.6.15/browser-polyfill.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

但就我而言,我已经将其包括在内,经过一些调查后,我发现我的代理阻止了脚本......

因此,请确保将它包含在 index.html 中,并确保您可以从需要的地方访问脚本以避免发生错误……最好的方法是将 url 复制并粘贴到浏览器中……

但是现在我们到了这一步,不是在谈论Symbol本身,在IE中无法识别的Symbol是什么?

Symbol() 函数返回一个符号类型的值,具有公开多个内置对象成员的静态属性,具有公开全局符号注册表的静态方法,并且类似于内置对象类但作为构造函数是不完整的,因为它不支持语法“new Symbol()”。

Symbol() 返回的每个符号值都是唯一的。符号值可以用作对象属性的标识符;这是数据类型的唯一目的。可以在 Symbol 的词汇表条目中找到一些关于目的和用法的进一步解释。

数据类型符号是一种原始数据类型。


小智 6

此解决方案肯定会起作用,当我遇到以下错误时,它对我有用:IE中未定义'Symbol'。它可以在Chrome和Firefox上运行的较早,但IE抛出此错误。我花了几个小时才找到此解决方案。我现在在Windows机器上使用最新的React响应“ react”:“ ^ 16.5.0”。

1. Install babel-polyfill
npm install --save-dev babel-polyfill
In package.json, it should have the following entries

"devDependencies": {
    "babel-core": "^6.26.3",
    "babel-loader": "^8.0.2",
    "babel-polyfill": "^6.26.0",
    "babel-preset-react": "^6.24.1"
  }

2. In index.js, add

    import babelPolyfill from 'babel-polyfill';
Run Code Online (Sandbox Code Playgroud)

问题应该得到解决

  • 如果将Babel polyfill导入index.js,则必须将其安装为常规依赖项,而不是dev依赖项 (5认同)