使用 babel 后,IE 中未定义“符号”

IT技术 reactjs webpack babeljs
2021-04-19 08:50:47

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

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

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

6个回答

您可以在代码的入口点要求 polyfill,这样它就会与 JavaScript 的其余部分捆绑在一起。

一种选择是使用:

require('babel-polyfill');

或者:

import 'babel-polyfill';

所有这些都在文档中进行解释

你好@Jurom 和@ Lukasz,我面临着同样的问题,即 Symbol 及其函数如 Symbol.Iterator 在 IE 中未定义,通过使用这个 Babel Polyfill,我的页面没有加载,但出现错误,IE 崩溃并要求重新加载。
2021-05-24 08:50:47
babel-polyfill为我解决了这个问题。谢谢!
2021-05-30 08:50:47
我与这个错误战斗了几个小时!谢谢
2021-06-02 08:50:47
出于某种原因,这在 IE10、IE11 中对我不起作用,所以我只是将它作为 Jurom 提到的 IE 的单独脚本包含在内。无论如何,我可能会将它从 webpack 中的主包中分离出来。
2021-06-09 08:50:47
这在 Angular 10 中对我有用,但前提是import "@babel/polyfill"; 语句在之前import 'zone.js/dist/zone';(这是有道理的,因为我得到的符号错误来自 zone.js)
2021-06-17 08:50:47

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

@Jurom,当我在 html 中添加这个文件时,我的 IE 崩溃了 :-(。请帮忙
2021-05-23 08:50:47
IE 边缘。它显示 Internet Explorer 不工作。而且我无法生成任何日志。
2021-05-23 08:50:47
@Rahul 什么版本的 IE?你说的崩溃是什么意思?你能提供错误日志吗?
2021-06-04 08:50:47
有没有一种方法我只能在 HTML 中包含这个脚本,例如:<!--[if IE]>script(type='text/javascript')。require('babel-core/browser-polyfill.js') <![endif]-->
2021-06-09 08:50:47
我在 IE11 中遇到了同样的问题,这也为我解决了这个问题。谢谢!
2021-06-11 08:50:47

这个解决方案肯定会起作用,当我遇到错误时它对我有用:'Symbol' is undefined in IE 。它在 Chrome 和 Firefox 中运行得更早,但 IE 抛出了这个错误。我花了几个小时才找到这个解决方案。我此时正在使用最新的 React react "react": "^16.5.0" 在 Windows 机器上。

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';

问题应该得到解决

如果在 index.js 中导入 Babel polyfill,则必须将其安装为常规依赖项,而不是 dev 依赖项
2021-06-09 08:50:47
谢谢!这似乎是让 ie11 与 Babel 和 Webpack 共同编译代码的当前方式一起工作的唯一方法。为什么 Babel 首先使用 es6 Symbols 来构建 es5 module是一个谜,因为它显然与旧浏览器不兼容,而与旧浏览器兼容是 Babel 存在的原因。
2021-06-20 08:50:47

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

<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.6.15/browser-polyfill.min.js"></script>

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

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

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

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

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

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

这也为我修好了。我使用了 Babel 在线编译器并将这个脚本包含在我的 HTML 中,瞧。
2021-05-27 08:50:47
我不敢相信这一行有效!为 react + material ui 追逐 polyfill 好几天了,这用一行就解决了所有问题。
2021-06-16 08:50:47

在有关运行时的文档中

// in bash
npm install babel-transform-runtime --save-dev

// in gulpfile
.pipe(babel({
  plugins: ['transform-runtime']
}))

编辑:在 prod 模式下更好地在 heroku 上使用 --save 而不是 --save-dev

这个module现在被称为 @babel/plugin-transform-runtime
2021-06-19 08:50:47