项目中只使用了Promise和async函数 如何正确的引入polyfill

项目中只使用到了Promise和async函数,如何正确的引入polyfill呢

我们知道polyfill的作用是为一些低版本浏览器提供一些辅助函数,比如在ie中window下是没有promise对象的,那么polyfill的作用是为其window手动创建一个对象并挂载到window上。

另外向一些数组的高级方法,polyfill也是为其提供兼容的处理。

简单介绍下我的项目,我需要写一个插件发布到npm上去供其他同学使用,但是在开发过程中Promise和async太香了,所以就直接使用了,但是在处理webpack打包的时候,如何引入polyfill让我犯了难。

1.如果直接这样写

在项目中直接把polyfill引进去是没问题的,正常运行。但是观其大小,未压缩的240kb,压缩后的99kb。这就很难受了  因为我自己写的代码只有5kb,这个包差不多是逻辑代码的20倍之多。这肯定是不想看到的。

想要代码瘦身,就必须知道这些高级语法对应的是哪个babel  然后分别引入

通过百度,很容易发现Promise依赖的包在core-js/fn/promise中,所以直接把promise的依赖babel引入就可以了

这就解决了promise的问题,但是再去百度async函数依赖哪个babel,网上的答案真的是让人不敢恭维。

其中babel官网是这样解释的

那么我按babel中说的  创建了.babelrc并在里边引入了@babel/plugin-transform-runtime,此时却发现打包后我的打包文件变形了,变成了module模式。

这也是我不想看到的  因为我的webpack是这样写的

我希望的是暴露出来一个函数叫consumerFeReportLog,显然这种方式与我的目标相差甚远。

因为我们知道async是Generator和co模块的语法糖

所以通过查看打包出来的代码  很容易找到async依赖的第一个包core-js/fn/symbol/async-iterator,然后追其打包后的函数发现里边还有一个runtime函数  这个函数没有定义,那么需要找一个提供这个函数的依赖包,最后找是regenerator-runtime/runtime

所以解决async依赖的包  可以这样

 

这样处理完后 再打包出来的代码就小多了。

async/await 是 ES6 引入的一种用于处理异步操作的语法糖,而 Promise 是 ES6 引入的一种用于处理异步操作的对象。 主要区别如下: 1. 语法:async/await 通过在函数前加上 `async` 关键字来定义异步函数,其可以使用 `await` 关键字来等待一个返回 Promise 的表达式。而 Promise 是通过创建一个实例对象来表示一个异步操作。 2. 可读性:async/await 的语法更加清晰和直观,代码可读性更高。它使用类似同步代码的方式来处理异步逻辑,使得代码更易于编写和维护。相比之下,Promise 链式调用的方式可能会导致代码嵌套和回调地狱。 3. 错误处理:在 async/await ,可以使用 try/catch 块来捕获和处理异步操作的错误。而 Promise 需要使用 `.catch()` 或 `.then()` 来处理错误,这样可能会导致错误处理代码分散在 Promise。 4. 异步流程控制:async/await 可以使用同步的方式来编写异步逻辑,使用 `await` 关键字可以等待一个异步操作完成后再继续执行后续代码。而 Promise 通过 `.then()` 方法来处理异步操作的返回结果,需要通过链式调用多个 `.then()` 来串联多个异步操作。 需要注意的是,async/await 本质上是基于 Promise 的,async 函数会返回一个 Promise 对象,可以通过 `.then()` 或 `.catch()` 来处理返回结果或错误。而且,async/await 只能在支持 ES6 的环境使用,而 Promise 可以在较老的环境通过 polyfill 或使用第三方库来支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋哈哈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值