Babel编译结果和ios8,9/IE低版本的兼容性问题
前言
最近做了一个关于校友会的公众号的项目,牵扯到一些移动端的H5
,技术栈使用:webpack+scss+babel
,在项目结束的时候,出现了一系列兼容ios8,9
和IE
低版本的问题,下面我将详细的把遇到的问题和解决问题的方法挨着记录下来。
错误1:Object.assign方法不识别问题Object.assign 方法报错:
undefined' is not a function (evaluating 'Object.assign(…)
对于以上报错,请教了某大神后,找到了一个Github
上的文档:直接使用Object.assign 有兼容性问题(Android5,iOS8.4),在本文中我们找到一个解决问题的方向,那就是安装一个npm
库:babel-plugin-transform-object-assign
,在我们安装了该库之后,并且在babel配置文件中加一行配置:"plugins": ["transform-object-assign"]
,最后我们再次编译代码,就不会再报关于Object.assign
的错误了。
错误2:can't find variable: SymbolSymbol报错:
can't find variable: Symbol
对于上述的Symbol
问题,我们只到ES6
引进了Symbol
,但是目前浏览器支持不是特别好,所以js中一旦出现了Symbol
,一般都会报错,所以对于这个问题,经过问度娘之后,我们发现一般这个问题没办法直接解决,最好的办法就是不用一些特定的ES6
语法,因为某些ES6
语法生成ES5
的时候回生成Symbol
,所以我们暂时只有不用哪些特定的语法,在我的代码中,我发现了我代码中出现Symbol
是因为我使用了一个迭代语法for of
,所以我果断将其换成了for in
,然后在生成代码中就没有了Symbol
了,大功告成!
后序
对于高版本的ios
和IE
,运行都没问题,就是用iphone4
,4s
等低版本ios
系统和低版本的IE
时就会出现以上代码语法不识别的报错,所以为了兼容低版本的ios
和IE
,我们应当避免使用类似ES6
语法。当然了,如果是自己的项目或者管理者后台项目,我们就没必要考虑这个问题了,因为chrome
浏览器兼容ES6
语法还是很不错的,或者safari
浏览器也一样。
如果对你有帮助,别吝啬一个赞,Thanks
!
说明
原创作品,禁止转载和伪原创,违者必究!