通过webpack解决浏览器兼容问题

news2024/11/23 22:08:19

前言

很多面试时都会问到关于浏览器兼容问题,正好最近在看webpack打包,那就在这里记录一下我们如何通过webpack来实现兼容。

需求

  1. 要知道我们到底需要兼容那些浏览器,在这里就需要用到browserlist来配置需要兼容的浏览器版本并告诉webpack中的其他插件去做对应的兼容。
  2. CSS的兼容:具体是给我们的CSS自动添加前缀实现,在这里就需要用到postcss包来实现
  3. JS的兼容:JS的兼容是通过babel来实现将ES6的语法向之前版本做转换以兼容浏览器,但是仅通过babel还不够,对于类似Promise这个高级语法我们还需要求助于polyfill。 总体来说如下图:

实现

browserlist 安装与配置

浏览器占有查询:caniuse.com/usage-table

  1. 安装browserlist
    yarn add browserlist -D
复制代码
  1. 配置browserlist:有两种配置方法 方法一:添加配置文件.browserslistrc
    (1) 在根目录下新建文件.browserslistrc (2) 编写需要配置的浏览器 如图:

解释一下:市场占有率 大于1% 或者 满足浏览器最新两个版本 或者 没有消死掉(当一个浏览器24个月没有官方更新就会认为死掉了) 满足上诉条件一个即可

方法二:在package.json中配置
如图:

这样配置后,后续做兼容时,其他loader就知道需要拉取那些代码来做浏览器兼容

CSS 兼容 (posttcss:转换样式的工具)

  1. 安装 postcss-loader
    yarn add postcss-loader
复制代码
  1. 配置postcss-loader

此时还不能达到自动添加前缀的效果,我们还需要引入 autoprefixer

  1. 安装autoprefixer
    yarn add autoprefixer -D
复制代码
  1. 在配置autoprefixer 为了方便 我们直接安装 postcss-preset-env (插件的集合)
    yarn add postcss-preset-env -D
复制代码
  1. 配置postcss-preset-env 新建postcss.config.js文件,然后编写配置:如图

此时,就会自动根据browserslistrc文件的配置,在给CSS样式添加兼容性了,实际运行效果如下
原本CSS:


实际打包后得到CSS

这样你的css就可以在各个浏览器做兼容啦!是不是soeasy~

JS兼容

  1. 安装babel-loder (先解决一部分兼容)
    yarn add babel-loader 
复制代码
  1. 在webpack.config.js中配置babel-loader

 此时并不会开始js代码的转换,bebel-loader只能当做一个工具,他还需要插件的帮助,即@babel/preset-env 3. 下载@babel/preset-env插件

    yarn add @babel/preset-env -D
复制代码
  1. 在根目录下新建babel.config.js并配置@babel/preset-env -D,如下图

 目前babel已经能够转换部分ES6语法了,如const,let,箭头函数,但是还不能转换Promise,async,await等,需要求助于polyfill 5. 安装polyfill 目前更新版本,polyfill官方建议我们在做JS转换时下载polyfill下的core-js和regenerator就够用了  下载:

    yarn add core-js regenerator-runtime -D
复制代码
  1. 配置polyfill:如下图

  1. 当我们在配置polyfill中useBuiltIns:'entry'时需要手动引入包 在(入口文件)index.js 下第一行引入:
    import "core-js/stable"
    import "regenerator-runtime/runtime"
复制代码

总结

浏览器控制包

  • browserlist
  • 配置文件:.browserslistrc

CSS 用到的包

  • postcss-loader
  • autoprefixer
  • postcss-preset-env
  • 配置文件:postcss.config.js

JS 用到的包

  • babel-loder
  • @babel/preset-env
  • core-js
  • regenerator-runtime
  • 配置文件:babel.config.js

webpack是一个很强大得到模块打包工具,在这里仅仅介绍了部分功能,后续有机会再继续更新~

分类:

前端

标签:

Webpack前端

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/126756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jenkins自动部署项目

目录 1.安装插件 2.配置 本文只讲解通过插件来自动部署项目,Jenkins的安装可以看博主的另一篇文章,绝对保姆级,简洁丝滑的安装教程: jenkins下载安装__BugMan的博客-CSDN博客 1.安装插件 目前业内常用的解决方法是使用publish…

程序员必备十大网站

窝窝整理了十大程序猿必备网站,涵盖了开源平台、搜索引擎、免费的精品课程,包括让你头疼的BUG、算法等。偷偷告诉你,还有帮你拿到心仪的 offer! 一,海量的资源平台 十大网站榜首 :GitHub — 开发者极其重…

图查询语言 nGQL 简明教程 vol.01 快速入门

本文旨在让新手快速了解 nGQL,掌握方向,之后可以脚踩在地上借助文档写出任何心中的 NebulaGraph 图查询。 视频 本教程的视频版在B站这里。 准备工作 在正式开始 nGQL 实操之前,记得先看过文档「快速入门流程」,部署、连接过 …

《小强升职记》读后感

为什么平庸? 成功的人每天都在忙碌,平庸的人每天也在忙碌,而时间对每个人来说是绝对公平的,那么,两者之间的差距到底是如何产生的呢? 第一,在这个人生的关键时期,我们被迫完成角色的转变。 …

C语言 字符函数和字符串函数及模拟实现

上图注意内容 代码解释如下 int main() {if (my_strlen("abc") - my_strlen("abcdef") > 0){printf(">\n");}else{printf("<\n");}return 0; }my_strlen int my_strlen(const char* str) {int count 0;//计数器assert(str…

Springboot AOP切面

文章目录SpringBoot Aop切面(Aop)一、什么是切面二、切面的用途三、AOP切面常用注解四、详细内容1、切面&#xff08;Aspect&#xff09;2、连接点&#xff08;Joinpoint&#xff09;3、通知&#xff08;Advice&#xff09;4.切入点&#xff08;Pointcut&#xff09;五、代码操…

PMP是什么?PMP证书有什么用?(含PMP资料)

PMP介绍 PMP的英文全称是Project Management Professional&#xff0c;中文全称叫做项目管理专业人士资格认证。 它是由美国项目管理协会(PMI)在全球范围内推出的针对项目经理的资格认证体系&#xff0c;严格评估项目管理人员知识技能是否具有高品质的资格认证考试&#xff0…

学习:如何使用Axure制作网站、app结构图

​“老师&#xff0c;axure里面可以制作网站的结构图吗&#xff1f;” “结构图只能在脑图工具中才能画吗&#xff1f;能不能直接在axure里面直接画&#xff1f;” “结构图到底需不需要做&#xff1f;对我来说好像没什么用呢” 在同学们的学习当中&#xff0c;有部分同学对…

CIO你好,现在是时候我们来谈一下“去”中台的问题了

去中台是个什么鬼 去中台&#xff1f;要不我去XXXXXXX 首先&#xff0c;你看到这个标题有没有懵圈&#xff1f;是不是有一种。。。 的感觉&#xff1f; 不过我现在告诉你&#xff0c;你没有看错。这篇文章是正儿八经的来谈“去”中台的。只不过这个“去”字&#xff0c;打着…

数据结构(链表)

链表及其实现 链式结构 顺序表插入、删除时间代价的分析&#xff0c;可以看出其时间复杂度是线性阶的&#xff0c;而且会引起大量已存储元素的位置移动。 改进方法&#xff1a;链式结构 各个元素的物理存放位置在存储器中是任意的&#xff0c;不一定连续。每个元素放在一个独…

国产新冠口服药重大突破:疗效不劣于Paxlovid,且安全性更高

*仅供医学专业人士阅读参考最近一段时间&#xff0c;新型冠状病毒感染&#xff08;Covid-19&#xff09;人数的激增&#xff0c;让全国多地迎来了重症“冲击波”&#xff0c;医疗卫生系统承受着极大的压力。 在新冠治疗药物方面&#xff0c;我国当前情况如何&#xff1f;最近Pa…

opencv鱼眼镜头矫正

说明 鱼眼镜头是一种视场角很大的镜头&#xff0c;但是得到的图片有很大的畸变&#xff0c;所以需要对鱼眼镜头进行标定&#xff0c;标定所得的参数可以对鱼眼镜头的图像进行矫正。 下图来自opencv的文档。其中c是鱼眼镜头原图&#xff0c;a和b是不同的矫正方法得到的图片。 …

K8S部署Apollo配置中心

K8S部署Apollo配置中心 参考文档: https://github.com/apolloconfig/apollo/tree/v1.8.0 [K8S部署apollo配置中心](https://www.cnblogs.com/Fengyinyong/p/14903725.html)[apollo官网文档](https://www.apolloconfig.com/#/zh/README)1、错误问题记录 在k8s里面部署时也遇到…

UDS-11.2 ReadDataByIdentifier (22) service

11.2.1 服务描述 来自&#xff1a;ISO 14229-1-2020.pdf ReadDataByIdentifier服务允许客户端从由一个或多个dataidentifier标识的服务器请求数据记录值。 客户端请求消息包含一个或多个两个字节的dataIdentifier值&#xff0c;用于标识由服务器维护的数据记录(关于允许的dataI…

【监督-非监督组合:全色锐化】

Supervised-unsupervised combined deep convolutional neural networks for high-fidelity pansharpening &#xff08;监督-非监督组合深度卷积神经网络实现高保真全色锐化&#xff09; 深度学习全色锐化方法因其优异的性能成为近年来的研究热点&#xff0c;基于Wald协议的卷…

GBASE合芯科技打造“国产芯片+数据库”国产替代解决方案

数据库的重要性 数据库是国产化基础软件的重要部分&#xff0c;是信息系统的核心。我国信息技术软硬件底层标准、架构、产品、以及生态体系被外国把控&#xff0c;这些上游核心技术遭遇限制严重影响了我国关键科技和产业的发展。2018年&#xff0c;中兴通讯被列入美国实体清单…

2022/12/29总结

今天AC了一道题目&#xff1a; P1825 [USACO11OPEN]Corn Maze S (1条消息) P1825 [USACO11OPEN]Corn Maze S_lxh0113的博客-CSDN博客 然后下面是学到的知识&#xff1a; 之前学习算法的时候总是牵扯到图&#xff0c;但是关于图的一些知识并没有了解。下面是有关图的基础知识…

区块链技术的官方材料整理

引自&#xff1a;区块链白皮书&#xff08;2018年&#xff09;、区块链白皮书&#xff08;2020年&#xff09;、中国区块链技术和应用发展白皮书、可信区块链赋能数字政府应用指南 区块链的概念 定义&#xff1a;区块链&#xff08;Blockchain&#xff09;是一种由多方共同维…

如何在 SwiftUI macOS 应用程序中显示和隐藏边栏

用户可以通过在边缘周围拖动来调整侧边栏的大小。 如果他们将它拖得足够远,侧边栏将关闭,并且无法将其设置回来。 本文将告诉您如何通过添加其他选项来显示和隐藏边栏来缓解此问题。 侧边栏一旦折叠,就无法恢复。 拖动左边缘会调整窗口大小,而不是将侧边栏带回来。 有两种…

力扣 1764. 通过连接另一个数组的子数组得到一个数组

题目 给你一个长度为 n 的二维整数数组 groups &#xff0c;同时给你一个整数数组 nums 。 你是否可以从 nums 中选出 n 个 不相交 的子数组&#xff0c;使得第 i 个子数组与 groups[i] &#xff08;下标从 0 开始&#xff09;完全相同&#xff0c;且如果 i > 0 &#xff…