我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

本篇内容主要讲解“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的方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

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

下载Word文档

猜你喜欢

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

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

按需加载是怎么实现的

按需加载按需加载是一种加载策略,仅在需要时加载资源。通过避免加载所有内容,它减少了页面大小和加载时间。实现:动态加载脚本:使用JavaScript加载脚本。模块化:将应用程序拆分为仅在需要时加载的模块。优势:减小页面大小提高性能改善可维护性最佳实践:仅在需要时加载使用缓存监控加载时间结合渐进式加载
按需加载是怎么实现的
2024-04-25

android加载动画的方法是什么

Android加载动画有多种方法,以下是几种常用的方法:1. 使用AnimationDrawable:通过将多个图片帧组合在一起形成动画效果。首先,在res/drawable文件夹下创建一个xml文件,定义帧动画,然后在代码中通过Anima
2023-08-08

bootstrap加载动画的方法是什么

要在Bootstrap中加载动画,您可以使用以下方法之一:1. 使用Bootstrap的CSS类:Bootstrap提供了一些内置的CSS类,可以用于创建加载动画。例如,您可以使用`.spinner-border`类创建一个旋转的加载图标,
2023-08-24

php加载文件的方法是什么

这篇文章主要介绍php加载文件的方法是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php加载文件的方法:1、使用“include 文件名”语句加载;2、使用“require 文件名”语句加载;3、使用“incl
2023-06-15

ubuntu加载8822驱动的方法是什么

今天小编给大家分享一下ubuntu加载8822驱动的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。ubuntu加载
2023-07-04

spring重新加载bean的方法是什么

Spring重新加载bean的方法有以下几种:1. 使用Spring的热部署功能:在开发环境中,可以配置Spring Boot的devtools模块,该模块支持热部署,当代码发生变化时自动重新加载bean。2. 使用Spring的刷新作用域
2023-10-10

vite2.x如何实现按需加载ant-design-vue@next组件的方法

本篇内容介绍了“vite2.x如何实现按需加载ant-design-vue@next组件的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
2023-06-14

ubuntu禁止模块加载的方法是什么

这篇文章主要介绍“ubuntu禁止模块加载的方法是什么”,在日常操作中,相信很多人在ubuntu禁止模块加载的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ubuntu禁止模块加载的方法是什么”的疑
2023-07-04

listview异步加载数据的方法是什么

在Android中,可以使用以下方法实现ListView的异步加载数据:1. 使用AsyncTask类:AsyncTask类是一个抽象类,用于在后台线程执行异步操作。可以通过继承AsyncTask类,并在后台线程中加载数据,然后在主线程中更
2023-09-26

iframe跨域加载页面的方法是什么

要在一个iframe中加载一个跨域的页面,可以使用以下方法:1. 使用postMessage方法:在父页面中,添加一个message事件监听器,然后在子页面中使用postMessage方法发送消息给父页面,父页面接收到消息后,可以动态改变i
2023-08-08

ubuntu加载中文字体的方法是什么

这篇“ubuntu加载中文字体的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“ubuntu加载中文字体的方法是什么
2023-07-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录