使用 Grunt-Babel 使 ES6 Internet Explorer 11 兼容

Posted

技术标签:

【中文标题】使用 Grunt-Babel 使 ES6 Internet Explorer 11 兼容【英文标题】:Make ES6 Internet Explorer 11 compliant using Grunt-Babel 【发布时间】:2020-03-28 12:39:46 【问题描述】:

我安装了 grunt-babel 以允许 IE 11 用户访问我们的网站。现在,对于这些用户,该网站已损坏。除了出现以下我不知道如何解决的错误之外,我基本上都取得了成功。

ReferenceError: regeneratorRuntime is not defined

看起来 polyfill 已被弃用,所以我想知道最好的解决方案是什么。

编辑 按照 justDan 和 David 的建议,我安装了 regenerator/runtime 包,现在收到错误 require is not defined

此代码将通过浏览器运行。我的公司正在使用自定义 CMS,它需要我们压缩主题文件,并且有很大的部分需要动态填充的文本,这是使用 ES6 模板文字的部分原因。

package.json 文件


  "name": "Some Site",
  "version": "1.0.0",
  "description": "",
  "main": "Gruntfile.js",
  "dependencies": 
    "regenerator-runtime": "^0.13.3"
  ,
  "devDependencies": 
    "@babel/core": "^7.7.2",
    "@babel/preset-env": "^7.7.1",
    "@babel/preset-es2015": "^7.0.0-beta.53",
    "babel-preset-es2015-nostrict": "^6.6.2",
    "grunt": "^1.0.4",
    "grunt-autoprefixer": "^3.0.4",
    "grunt-babel": "^8.0.0",
    "grunt-contrib-compress": "^1.5.0",
    "grunt-contrib-concat": "^1.0.1",
    "grunt-contrib-cssmin": "^3.0.0",
    "grunt-contrib-imagemin": "^3.1.0",
    "grunt-contrib-less": "^2.0.0",
    "grunt-contrib-uglify": "^4.0.1",
    "grunt-contrib-watch": "^1.1.0",
    "grunt-purifycss": "^0.1.2"
  ,
  "scripts": 
    "test": "echo \"Error: no test specified\" && exit 1"
  ,
  "keywords": [],
  "author": "",
  "license": "ISC"


.babelrc 文件


  "presets": ["@babel/preset-env"]

【问题讨论】:

您是否尝试使用/导入core-js/stableregenerator-runtime/runtime 来代替@babel/polyfill? babeljs.io/docs/en/babel-polyfill 我做到了,但我现在收到另一个错误ReferenceError: require is not defined。我应该使用 Browserify 吗? 您是使用节点还是通过浏览器运行代码?无论哪种方式,我认为您可能会发现这很有用:***.com/questions/31931614/… 如果可能的话,能否请您尝试告诉我们有关您的开发环境的详细信息,如果您发布任何用于重现问题的小示例代码会更好。它可以帮助我们更好地理解问题。感谢您的理解。 我遇到的部分问题是知道为什么需要 regenerator-runtime/runtime。我只是在使用一些模板文字和箭头函数,没什么疯狂的,所以我只需要从 ES6 -> ES5 进行简单的转译。 【参考方案1】:

你需要安装并运行这个包

https://www.npmjs.com/package/regenerator-runtime

【讨论】:

以上是关于使用 Grunt-Babel 使 ES6 Internet Explorer 11 兼容的主要内容,如果未能解决你的问题,请参考以下文章

npm:使用“npm 卸载”与仅删除文件夹

使对象具有ES6中Iterator接口的实现方法

ES6

关于ES6新增的东西

ES6 迭代器简述

es6之更优雅的条件语句