前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ESBuild压缩CSS引发的一个兼容性Bug的解决姿势

ESBuild压缩CSS引发的一个兼容性Bug的解决姿势

作者头像
CRPER
发布2022-09-19 15:07:24
6100
发布2022-09-19 15:07:24
举报
文章被收录于专栏:CRPER折腾记CRPER折腾记

前言

测试小伙伴们在集成测试中反馈了一个问题,Safari 12访问项目个别页面场景样式错乱了。 我的第一直觉认为postcss那边处理出了问题,最后发现并不然,且听我道来!

问题背景

公司前端工程是基于webpack体系的,为什么会引入esbuild来处理css的部分压缩工作,主要是为了解决一个长期出现的疑难问题;内部样式注入页面的方式把有部分我们不要的东西打到标品了。而esbuild-loader介入到构建流程,就可以中途处理这些【压缩,去除sourcemap这些】!况且而且esbuild足够快,又能解决使用场景,何乐而不为!

目前暴露的一个问题就是会把css样式偏移量传统的写法,采用现代化的特性替换,比如inset取代上下左右的偏移量!!!!

环境信息

  • webpack : v4
  • esbuild : v0.14.1

Bug效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这个特性 Safari 14.1才正式支持,低版本浏览器的表现就是偏移量全部丢失了。

修正图

image.png
image.png

解决姿势

1. 排查postcss

为什么首先排查这个,因为工程就是借助postcss的一些能力来做样式处理流转的。 那么想一想,最近最大的postcss改动是啥,就是引入了postcss-preset-env 来做动态降级【polyfill】

  1. 默认是读取工程的browserlist配置文件来识别要加载的插件
    • 以为这个没有读取到,手动设置
  2. 代码表现行为是shorthand【聚合多个属性简化写法】
    • 排查了autoprefixer

两者统一配置,截图如下

在这里插入图片描述
在这里插入图片描述
  1. 排查是否启用了cssnano的简写特性
在这里插入图片描述
在这里插入图片描述

几次打包验证下来,都没有任何变化,那初步可以推断,并不是 postcss导致的;

2. 排查loader流转

除了less-loader,scss-loader这类之外的,最近有引入什么新的loader加入样式流转么? 有的,引入了 esbuild-loader! 【用于解决祖传流转的疑难问题】

  1. 看了下esbuild-loader的readme和源码,只是包了一层,底层还是用的esbuild去做处理
  2. esbuild的文档和源码,压缩机制是他们内部实现的,只有一些相关参数的说明
  3. 快速验证法,把esbuildminify这个选项设置关闭了,看看表现形式【压缩后的产物源码】。
在这里插入图片描述
在这里插入图片描述

3. 修正:核心代码变更

在这里插入图片描述
在这里插入图片描述

minify会启用esbuild所有的压缩插件,表现形式为不是我们要的【异常】, 而我对css只想去除sourcemap相关的 , 并且字符串初步压缩, 这里的改动就是只压缩空白,不压缩标识符这些! 【满足】

另外,官方的issue也有人遇到且反馈了,有兴趣可以看看~

结论

esbuild目前来说,可能对js的支持度比css会稍微好一些,但是处于js降级对于browserlist这类的完全兼容还在路上,css的降级处理更是薄弱!代码压缩实现也是esbuild工具链实现的! 所以,我们涉及构建流程的变更【特别是引入新的工具的】,很大概率会引入兼容性问题,这时候需要覆盖兼容性范围测试,才能保证改动稳妥使用上! 有不对之处请留言,谢谢阅读。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 问题背景
    • 环境信息
      • Bug效果图
        • 修正图
        • 解决姿势
          • 1. 排查postcss
            • 2. 排查loader流转
              • 3. 修正:核心代码变更
              • 结论
              相关产品与服务
              文件存储
              文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档