如何通过 Babel、Shim 和 Polyfill 将 Javascript 从 ES6 转换为 ES5

杂交种

我一直在尝试使用 Babel 和 shims/polyfills 使我的简单 HTML/JS 网站向后兼容(IE11 及以下),但一直无法正确执行此操作。我目前的网站使用了一些新的功能,如Promise()fetch()document.querySelectorAll().forEach(),和() => {}

我尝试添加es6-shimes5-shimfetch- polyfillpromise- polyfill 通过 Babel 从 es6 -> es5 转译我的代码之上。无论如何,当我使用较旧的浏览器(例如 IE 11 或 10)加载我的网页时,我会收到多个错误。错误说这() => {}不起作用,这.forEach()不是一个函数,这没有意义,因为我使用的是垫片和 Babel。

这是我的 JS 包括的顺序:

[... body content ...]

<script src="assets/libs/es5-shim/es5-shim.min.js" type="text/javascript"></script>
<script src="assets/libs/es6-shim/es6-shim.min.js" type="text/javascript"></script>
<script src="assets/libs/promise-polyfill/promise-polyfill.min.js" type="text/javascript"></script>
<script src="assets/libs/fetch-polyfill/fetch.umd.js" type="text/javascript"></script>

[... rest of scripts ..]

并将我的 es6 代码转换为 es5,我执行了以下操作:

npm install -D babel-cli

npm install -D babel-preset-env

// .babelrc

{
  "presets": ["env"]
}
// package.json
...
"scripts": {
  "build": "babel src -d build",
},
...

npm run build

两个示例错误:“对象不支持 forEach 的属性或方法”( querySelectorAll().forEach()) 和“语法错误”( () => {})

连接器

您使用的是旧版本的 Babel,切换到 Babel 7 并开始使用@babel/preset-env. NodeList.forEach不会在任何 IE 中工作,需要单独填充,因为 Babel polyfill 不会填充任何缺少的原型方法。

最短的 polyfill 可能是

if (!NodeList.prototype.forEach) NodeList.prototype.forEach = Array.prototype.forEach;

您还需要配置您.babelrc的代码,以便为 IE 转换代码。Babel 7 的示例:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "browsers": ["ie >= 10", "last 1 version"]
        }
      }
    ]
  ]
}

PS:那时你可能不需要垫片。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过模块加载和类继承将ES6转换为ES5

来自分类Dev

将 ES6 箭头函数转换为 ES5 函数 JavaScript

来自分类Dev

如何使用 babel-loader 将 node_module 中的一个特定文件/文件夹从 es6 转换为 es5?

来自分类Dev

使用ES6和ES7功能的Javascript库是否需要babel-polyfill?

来自分类Dev

如何在 Angular App 的运行时将 ES6 代码转换为 ES5 代码

来自分类Dev

您如何polyfill Javascript ES6`new.target`?

来自分类Dev

在运行时将ES5代码转换为ES6

来自分类Dev

React-native将getInitialState(ES5)转换为构造函数(ES6)“ ListView”

来自分类Dev

Webpack无法将ES6转换为ES5

来自分类Dev

手动将 es6 箭头函数转换为 es5?

来自分类Dev

将旧的 JavaScript 代码转换为 ES6 模块

来自分类Dev

将 javascript Winston 工厂类转换为 ES6

来自分类Dev

无需转译器即可将ES6 JavaScript转换为ES5

来自分类Dev

如何将ES6转换为ES5而不会在浏览器中大量生产?

来自分类Dev

将React JSX组件转换为ES5 USBa Babel

来自分类Dev

如何将TypeScript转换为ES6?

来自分类Dev

如何将Purescript转换为ES6

来自分类Dev

将具有 addEventListener 和 Parameter 的箭头函数转换为常规 ES5 函数

来自分类Dev

使用Babel.js将ES6箭头功能编译为Es5

来自分类Dev

babel 将 ES6 转译为 ES5 时的方法未定义

来自分类Dev

如何使用ES6过滤器和地图将平面结构转换为嵌套结构

来自分类Dev

如何将中继查询从TypeScript转换为ES5?

来自分类Dev

使用es5和es6将输入注入组件构造函数

来自分类Dev

使用es5和es6将输入注入组件构造函数

来自分类Dev

将JavaScript ES6函数转换为ES3

来自分类Dev

将Node.js文件转换为ES5

来自分类Dev

将异步/等待功能转换为等效的ES5

来自分类Dev

使用Webpack将TypeScript转换为es5

来自分类Dev

浏览器如何区分ES5和ES6脚本?

Related 相关文章

  1. 1

    通过模块加载和类继承将ES6转换为ES5

  2. 2

    将 ES6 箭头函数转换为 ES5 函数 JavaScript

  3. 3

    如何使用 babel-loader 将 node_module 中的一个特定文件/文件夹从 es6 转换为 es5?

  4. 4

    使用ES6和ES7功能的Javascript库是否需要babel-polyfill?

  5. 5

    如何在 Angular App 的运行时将 ES6 代码转换为 ES5 代码

  6. 6

    您如何polyfill Javascript ES6`new.target`?

  7. 7

    在运行时将ES5代码转换为ES6

  8. 8

    React-native将getInitialState(ES5)转换为构造函数(ES6)“ ListView”

  9. 9

    Webpack无法将ES6转换为ES5

  10. 10

    手动将 es6 箭头函数转换为 es5?

  11. 11

    将旧的 JavaScript 代码转换为 ES6 模块

  12. 12

    将 javascript Winston 工厂类转换为 ES6

  13. 13

    无需转译器即可将ES6 JavaScript转换为ES5

  14. 14

    如何将ES6转换为ES5而不会在浏览器中大量生产?

  15. 15

    将React JSX组件转换为ES5 USBa Babel

  16. 16

    如何将TypeScript转换为ES6?

  17. 17

    如何将Purescript转换为ES6

  18. 18

    将具有 addEventListener 和 Parameter 的箭头函数转换为常规 ES5 函数

  19. 19

    使用Babel.js将ES6箭头功能编译为Es5

  20. 20

    babel 将 ES6 转译为 ES5 时的方法未定义

  21. 21

    如何使用ES6过滤器和地图将平面结构转换为嵌套结构

  22. 22

    如何将中继查询从TypeScript转换为ES5?

  23. 23

    使用es5和es6将输入注入组件构造函数

  24. 24

    使用es5和es6将输入注入组件构造函数

  25. 25

    将JavaScript ES6函数转换为ES3

  26. 26

    将Node.js文件转换为ES5

  27. 27

    将异步/等待功能转换为等效的ES5

  28. 28

    使用Webpack将TypeScript转换为es5

  29. 29

    浏览器如何区分ES5和ES6脚本?

热门标签

归档