react呈现的兼容性问题。
react兼容所有支流浏览器,然而对于IE9和IE10须要退出polyfill代码。然而须要在业务代码中显示引入,不太敌对,所以摸索了一下。
preset-env。
为高版本javascript提供兼容低版本浏览器的代码。
罕用选项:
- browsers,指定须要兼容哪些浏览器的那些版本,浏览器列表,兼容性查问工具。注:就Babel的兼容性查问而言caniuse不牢靠,这里是依据。
- include,如果应用useBuildIns位usage模式可能会在这里碰到坑,原本文档写的是能够强制引入没有检测到然而咱们须要的polyfill代码,然而usage模式的引入早于include而且文档没有更新,看如下论断:
useBuildIns,蕴含三个值entry、usage、false。
- entry,在入口文件引入全副的polyfill。长处是彻底解决兼容问题,毛病是导致最终代码体积比拟大。
- usage,依据代码的应用状况引入polyfill。长处是按需引入代码体积减小很多,毛病是node_modules中的高版本javascript检测不进去,引入不了polyfill。
- false,不增加polyfill也不解决兼容问题。
能够看到三个值都有一些毛病,须要一种既能按需引入又能解决node_modules中兼容问题的计划。
preset-env的无奈对依赖包中的代码polyfill。
- 在webpack的babel-loader中配置include蕴含node_modules,然而导致打包工夫超长( node_modules中的代码太多了),而且引入polyfill的时候不是引入到入口文件中导致引入反复的问题。
- 在babel的GitHub的issue中发现的一种计划,本人写插件,强制把须要的core-js模块引入到入口文件。
- polyfill.io与动静引入polyfill。
计划:在我的项目中插入脚本,把浏览器的UA信息附着到申请中,而后在服务端剖析UA对应的浏览器,而后返回对应的polyfill。
polyfill.io是更优良的计划,能解决浏览器兼容问题,而且对资源体积也不会节约,毛病是对须要兼容的浏览器会引入所有polyfill。