按需加载babel-polyfill

本文介绍了babel-polyfill在转换ES新特性时的局限性和潜在问题,包括增加包体积和全局污染。提出了三种解决方案:单独引入所需库、使用babel-runtime和babel-plugin-transform-runtime以避免全局污染,以及利用babel-preset-env按需加载polyfill。通过配置babel-preset-env的useBuiltIns选项,可以实现根据代码中实际使用的语言特性导入polyfill,从而减少打包大小。
摘要由CSDN通过智能技术生成

babel-polyfill

Babel默认只转换JS语法,而不转换新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局对象,以及一些定义在全局对象上的方法(比如Object.assign)都不会转码。

举例来说,ES2015在Array对象上新增了Array.from方法。Babel 就不会转码这个方法。如果想让这个方法运行,必须使用babel-polyfill。(内部集成了core-js和regenerator)

npm install babel-polyfill --save

使用时,在所有代码运行之前增加require('babel-polyfill')。或者更常规的操作是在webpack.config.js中将babel-polyfill作为第一个entry。因此必须把babel-polyfill作为dependencies而不是devDependencies。

注意: 在你的整个应用里只使用一次require("babel-polyfill")。多次importrequirebabel-polyfill会引起报错,因为它可能导致全局冲突和其他难以追踪的问题。 我们建议创建一个只包含require语句的单个入口文件。

babel-polyfill的缺点

  1. 使用后打包后的体积很大,因为babel-polyfill是一个整体,把所有方法都加到原型链上。比如我们只使用了Array.from,但它把Object.defineProperty也给加上了,这就是一种浪费了。
  2. babel-polyfill会污染全局变量,给很多类的原型链上都作了修改,如果我们开发的也是一个类库供其他开发者使用,这种情况就会变得非常不可控。

解决方法1:单独引入

可以通过单独使用core-js的某个类库来解决,比如通过引入babel-runtime/core-js/promise来获取Promise

但是这样需要我们认为判断并且手动引入类库,太麻烦了。

解决方法2:使用ba

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值