iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >babel7按需加载polyfill的方法是什么
  • 466
分享到

babel7按需加载polyfill的方法是什么

2023-07-05 03:07:03 466人浏览 安东尼
摘要

本篇内容主要讲解“babel7按需加载polyfill的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“babel7按需加载polyfill的方法是什么”吧!babel7babel7发布

本篇内容主要讲解“babel7按需加载polyfill的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“babel7按需加载polyfill的方法是什么”吧!

babel7

babel7发布了。

在升级到 Babel 7 时需要注意几个重大变化:

  • 移除对 node.js 6 之前版本的支持;

  • 使用带有作用域的 @babel 命名空间,以防止与官方 Babel 包混淆;

  • 移除年度预设,替换为 @babel/preset-env;

  • 使用选择性 TC39 个别提案替换阶段提案;

  • TC39 提议插件现在是 -proposal,而不是 -transfORM

  • 为某些面向用户的包(例如 babel-loader、@babel/cli 等)在 @babel/core 中引入peerDependency。

官方提供了一个工具babel-upgrade,对于老项目,只需要执行:npx babel-upgrade --write --install

useBuiltIns:usage

babel的polyfill总是比较大,会影响一些性能,而且也会有一些没用的polyfill,怎么减少polyfill的大小呢?

babel7提供了useBuiltIns的按需加载:usage。

配置中设置useBuiltIns:usage,babel就会自动把所需的polyfill加载进来,不需要手动import polyfill文件。

配置如:

{    "presets": [      "@babel/preset-React",      ["@babel/env", {        "targets": {          "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]        },        "useBuiltIns": "usage",        "debug": true      }]    ],    "plugins": ["@babel/transform-runtime"]  }

babel提供的@babel/env全面替换es2015,stage插件。(如果用到stage的某些插件需要自行引入。个人感觉stage用起来太不方便了)。

之前的babel-preset-env/babel-preset-react全都改名为@babel/xxx,如果在babel7你还按之前的写法,会报错:

Error: Plugin/Preset files are not allowed to export objects, only functions.

效果

看下useBuiltIns:usage的效果。"debug"选项开到true,可以看到打包的文件。

我用es6摘抄了一些语法,用来测试编译:

const a = Object.assign({}, { a: 1 });console.log(a);function timeout(ms) {    return new Promise((resolve) => {        setTimeout(resolve, ms);    });}async function asyncPrint(value, ms) {    await timeout(ms);    console.log(value);}let s = Symbol();typeof s;class ColorPoint {    constructor(x, y, color) {      this.color = color;    }    toString() {      return this.color + ' ' + super.toString(); // 调用父类的toString()    }  }asyncPrint('hello world', 50);function* helloWorldGenerator() {  yield 'hello';  yield 'world';  return 'ending';}var hw = helloWorldGenerator();console.log(hw.next());

babel7按需加载polyfill的方法是什么

babel编译之后,可以看到加载的polyfill只加载了 es6.object.assign,es6.promise, es6.symbol,es7.symbol.async-iterator , regenerator-runtime。

babel是怎么知道我们需要哪些polyfill的?

根据我们填的"targets",babel会去查用到的api,当前的target环境支持什么不支持什么,不支持的才加polyfill。

可以看到我们编译后的文件已经加了polyfill。

babel7按需加载polyfill的方法是什么

文件大小和性能都有很多提高。

useBuiltIns:entry

useBuiltIns:entry就没有那么智能了,他会根据target环境加载polyfill,他需要手动import polyfill,不能多次引入。
@babel/preset-env会将把@babel/polyfill根据实际需求打散,只留下必须的。做的只是打散。仅引入有浏览器不支持的polyfill。这样也会提高一些性能,减少编译后的polyfill文件大小。

main.js需要引入polyfill。import '@babel/polyfill';
可以看到效果。我只截了部分polyfill依赖。

babel7按需加载polyfill的方法是什么

编译后的文件引入了一堆polyfill。

babel7按需加载polyfill的方法是什么

最佳实践

只用polyfill不是最完美的方案。
polyfill会额外引入一些函数,比如:

babel7按需加载polyfill的方法是什么

因为polyfill没有babel-runtime的helper函数,在编译async函数的时候,会引入以上的代码asyncGeneratorStep_asyncToGenerator

如果你每个文件都用到了async,那么冗余的代码将会很大。

babel-runtime

最佳方案就是在用polyfill的同时,再用babel-runtime。

babel-runtime会把asyncGeneratorStep,_asyncToGenerator等函数require进来。从而减小冗余。

这得益于babel-runtime的helper函数。

所以最佳的配置是polyfill+babel-runtime。

如果用了react可以加@babel/preset-react。

{    "presets": [      "@babel/preset-react",      ["@babel/env", {        "targets": {          "browsers": ["last 2 versions", "ie 11"]        },        "useBuiltIns": "usage"      }]    ],    "plugins": ["@babel/transform-runtime"]  }

可以看到,_asyncToGenerator2已被require。

babel7按需加载polyfill的方法是什么

到此,相信大家对“babel7按需加载polyfill的方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: babel7按需加载polyfill的方法是什么

本文链接: https://www.lsjlt.com/news/349084.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • babel7按需加载polyfill的方法是什么
    本篇内容主要讲解“babel7按需加载polyfill的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“babel7按需加载polyfill的方法是什么”吧!babel7babel7发布...
    99+
    2023-07-05
  • babel7按需加载polyfill示例详解
    目录babel7useBuiltIns:usage效果babel是怎么知道我们需要哪些polyfill的?useBuiltIns:entry最佳实践babel-runtimebabe...
    99+
    2023-02-05
    babel7按需加载polyfill babel7 polyfill
  • vue中的按需加载怎么实现
    这篇“vue中的按需加载怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue中的按...
    99+
    2024-04-02
  • vite2.x实现按需加载ant-design-vue@next组件的方法
    1.使用版本 vite:2.0 ant-design-vue: 2.0.0-rc.8 vue:3.0.5 2.安装vite插件 yarn add vite-plu...
    99+
    2024-04-02
  • HTML5 本地存储和内容按需加载的思路和方法是怎样的
    HTML5 本地存储和内容按需加载的思路和方法是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。HTML5自...
    99+
    2024-04-02
  • android加载动画的方法是什么
    Android加载动画有多种方法,以下是几种常用的方法:1. 使用AnimationDrawable:通过将多个图片帧组合在一起形成...
    99+
    2023-08-08
    android
  • php加载文件的方法是什么
    这篇文章主要介绍php加载文件的方法是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php加载文件的方法:1、使用“include '文件名'”语句加载;2、使用“require '文件名...
    99+
    2023-06-15
  • bootstrap加载动画的方法是什么
    要在Bootstrap中加载动画,您可以使用以下方法之一:1. 使用Bootstrap的CSS类:Bootstrap提供了一些内置的...
    99+
    2023-08-24
    bootstrap
  • webpack中代码分割和按需加载有什么用
    小编给大家分享一下webpack中代码分割和按需加载有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!为什么需要代码分割和按...
    99+
    2024-04-02
  • 怎么在vue3中按需加载第三方组件库
    这篇文章给大家介绍怎么在vue3中按需加载第三方组件库,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。环境vue3.0.5vite2.3.3安装 Element Plusyarn add elemen...
    99+
    2023-06-15
  • spring重新加载bean的方法是什么
    Spring重新加载bean的方法有以下几种:1. 使用Spring的热部署功能:在开发环境中,可以配置Spring Boot的de...
    99+
    2023-10-10
    spring bean
  • ubuntu加载8822驱动的方法是什么
    今天小编给大家分享一下ubuntu加载8822驱动的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。ubuntu加载...
    99+
    2023-07-04
  • Django容器的Python加载方法是什么?
    Django是一个流行的Python Web框架,它具有易用性和高度可扩展性的特点。在使用Django时,我们通常会将应用程序部署到容器中,以便更好地管理和维护应用程序。本文将介绍如何在Django容器中加载Python。 首先,我们需要知...
    99+
    2023-08-24
    容器 load django
  • vite2.x如何实现按需加载ant-design-vue@next组件的方法
    本篇内容介绍了“vite2.x如何实现按需加载ant-design-vue@next组件的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2023-06-14
  • ubuntu禁止模块加载的方法是什么
    这篇文章主要介绍“ubuntu禁止模块加载的方法是什么”,在日常操作中,相信很多人在ubuntu禁止模块加载的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ubuntu禁止模块加载的方法是什么”的疑...
    99+
    2023-07-04
  • iframe跨域加载页面的方法是什么
    要在一个iframe中加载一个跨域的页面,可以使用以下方法:1. 使用postMessage方法:在父页面中,添加一个message...
    99+
    2023-08-08
    iframe
  • winform异步加载窗体的方法是什么
    要在Winform中实现异步加载窗体,可以使用Task类来实现。以下是一个示例代码: private async void butt...
    99+
    2024-04-02
  • listview异步加载数据的方法是什么
    在Android中,可以使用以下方法实现ListView的异步加载数据:1. 使用AsyncTask类:AsyncTask类是一个抽...
    99+
    2023-09-26
    ListView
  • ubuntu加载中文字体的方法是什么
    这篇“ubuntu加载中文字体的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ubuntu加载中文字体的方法是什么...
    99+
    2023-07-04
  • Gallery2数据加载及渲染的方法是什么
    要加载和渲染Gallery2的数据,你可以按照以下步骤进行操作: 连接数据库:Gallery2使用MySQL数据库来存储和管理数...
    99+
    2023-10-23
    Gallery2
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作