babel-polyfill的几种使用方式

babel-polyfill的几种使用方式

Jul 27, 2022 ·
6 Min Read

转载至👉 https://www.cnblogs.com/Jeely/p/11231530.html

为什么要使用 babel-polyfill

Babel是一个广泛使用的转码器,可以将 ES6 代码转为 ES5 代码,从而可以在现有环境执行,所以我们可以用 ES6 编写,而不用考虑环境支持的问题;

有些浏览器版本的发布早于 ES6 的定稿和发布,因此如果在编程中使用了 ES6 的新特性,而浏览器没有更新版本,或者新版本中没有对 ES6 的特性进行兼容,那么浏览器就会无法识别 ES6 代码,例如 IE9根 本看不懂代码写的 letconst 是什么东西?只能选择报错,这就是浏览器对 ES6 的兼容性问题;

Babel默认只转换新的 JavaScript 语法(syntax),如箭头函数等,而不转换新的 API,比如 IteratorGeneratorSetMapsProxyReflectSymbolPromise等全局对象,以及一些定义在全局对象上的方法(比如 Object.assign)都不会转码;因此我们需要 polyfill

因为这是一个 polyfill (它需要在源代码之前运行),我们需要让它成为一个 dependency(上线时的依赖),而不是一个 devDependency(开发时的依赖);

1.使用转换插件: babel-plugin-transform-xxx

配置完一个转换插件后, 代码中每个使用这个 API 的地方的代码都会被转换成使用 polyfill 中实现的代码

2.使用插件 babel-runtimebabel-plugin-tranform-runtime

相比方法1,相当于抽离了公共模块,避免了重复引入,从一个叫 core.js 的库中引入所需 polyfill (一个国外大神用ES3写的ES5+ polyfill)

3.全局babel-polyfill(不使用useBuiltIns)

4.全局 babel-polyfill (使用babel-preset-env 插件和 useBuiltIns 属性)

{
"presets": [
[
"env", {
"modules": false,
"targets": {
"browsers": ["ie >=9"]
},
"useBuiltIns": true,
"debug": true
}
]
]
}

注意:

5.polyfill.io

一个 CDN 方式提供的 polyfill,可根据浏览器 UserAgent 自动返回合适的polyfill,详细内容自行google

Last edited Feb 15