Background
目前 Umi 4 主要碰到两个浏览器兼容的问题:
esbuild
作为压缩器会对 ES5 代码做反向优化变成 ES6,导致配置targets
以后不改压缩器也不能工作,用户排查及使用成本较高, from @xiaohuoni- 社区越来越多包只发布 ES6 产物,但 Umi 4 默认不用 babel 编译
node_modules
,导致产物里出现高级语法,添加extraBabelIncludes
一旦数量变大维护成本也会变高,from @fz6m
Proposal
根据 targets
自动切换框架配置?例如 targets
的最低浏览器如果不兼容 ES6,那么默认就切压缩器 + node_modules
走编译。
如果有其他建议或方案,请直接在下方讨论。
6条答案
按热度按时间ymdaylpp1#
esbuild 的 ”优化“ 目前遇到的例子
\n
少,所以会优化成 es6 模板字符串:rgba()
变成#rrggbbaa
,省字节parcel-css
一致,在不指定低 targets 时,四边0
将转换为inset
:beq87vna2#
还有人需要兼容不支持 es6 的浏览器,太惨啦。😂
qojgxg4l3#
作为一个新手,我就想知道,umi4创建的脚手架,能不能默认配置成不支持ie,现在一build就报错啊,大神些!
没法build,也不知道改哪里!
ztmd8pv54#
IE 兼容性问题
IE 被淘汰,现代浏览器主流背景下,umi4 默认不兼容 IE ,在 #8658 可以参与相关讨论。
若你需要兼容 es5 ,目前的缓解方法是: 调整 js 与 css 的压缩器
#8930
icnyk63a5#
IE 兼容性问题 IE 被淘汰,现代浏览器主流背景下,umi4 默认不兼容 IE ,在 #8658 可以参与相关讨论。
若你需要兼容 es5 ,目前的缓解方法是: 调整 js 与 css 的压缩器
#8930
我现在的问题是使用antdpro初始化脚手架后,build报错不兼容ie,不知道怎么处理。我不需要兼容ie!
nfzehxib6#
默认的兼容说明
默认不支持 IE ,
targets
为chrome: 80
,如需调整,请指定明确的 targets :兼容旧时代浏览器 ( IE 11 ) 的说明
一、一种自带的兼容解法
框架自带提供一个
legacy
配置用于构建降级(使用限制等详见 config > legacy ):默认仅在构建时生效,将尝试构建能使 IE 兼容的产物。
二、legacy mode 的更多自定义
legacy
开启时,默认会转译全部node_modules
,这在大型项目中,会极大的增加构建时间。若你了解当前项目使用的第三方依赖情况(知道哪些不再提供
es5
产物了),可以关闭node_modules
的转换,改为使用extraBabelIncludes
定点配置那些需要额外纳入转换范围的包。一个例子:
三、提高兼容的鲁棒性
legacy
选项并不能 100% 保证产物没有边界情况的运行在被淘汰的浏览器内,你可能还需要添加前置的全量 polyfill 来增强项目的 鲁棒性 。参考的思路有:
注:
四、在开发环境验证
推荐的做法是:构建后在本地通过
umi preview
或serve
、nginx 等启动服务,来验证产物的 IE 11 运行可行性。当你需要在开发环境验证时:
legacy.buildOnly
置为false
。注:IE 11 并不能完整支持开发时的热更新,且缓存可能需要人为在控制台进行清除后才能看到最新的页面,请做好准备。