前言
我们的项目采用的是Webpack@5
+react@17
,希望兼容到IE
浏览器(IE 9+
,不含IE9
)
浏览器兼容性
问题排查
如果发现页面无法在IE
浏览器中打开,请依次确认以下配置是否正确:
- 查看
.browserslistrc
是否配置了IE
浏览器,浏览器的型号需要明确设置,不设置等同于不兼容,笔者的设置是ie > 9
- 确保在代码最顶端引入了
React
所需要的polyfill
( 详见 ),facebook
官方出品的 react-app-polyfill 可以帮助你简化上述工作,只需要在最顶端引入react-app-polyfill
即可。如import 'react-app-polyfill/ie9';
或import 'react-app-polyfill/ie11';
- 不要用到一些
IE
既不支持也没有polyfill
的特性,如classList.value
,考虑用className
替代 - 如果希望在
devServer
模式下可以在IE
中开发,则需要关闭hot
以及webSocketServer
功能(值设置为false
)并且不要使用webpack.HotModuleReplacementPlugin
(webpack
中的webSocket
对IE
的影响不是很稳定,如果遇到问题,此方案可以一试) - 如果你的
IE
浏览器版本不对,例如虽然是IE11
,但打开网页时却是按照IE8
(或其它)打开的,那么需要考虑是不是设置了兼容模式,可以清掉后再试(方法是:设置-兼容性视图设置-删除添加的网址)
注意:如果上述均已经配置妥当,但依然白屏,且报错信息比较模糊,则可以将
Webpack
的devtool
设置为source-map
,此时源码被原样保留,方便调试
解误
- 有些资料里强调为了兼容
IE
需要设置target: ['web', 'es5']
,实际上经过测试,发现不设置也没问题,因为我们的项目里有.browserslistrc
,会对生成的代码兼容性发挥作用