问题描述:
项目在低版本的手机上或着其他浏览器上(比如 ie),打不开,直接显示空白,报错为语法错误。
显示详情:
解决步骤:
- 因为是低版本的兼容性问题,那首先就做一些js的低版本适配。
-
安装babel-polyfill【(npm)[https://babeljs.io/docs/en/babel-polyfill]】:Babel默认只转换新的JavaScript语法(syntax),如箭头函数等,而不转换新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局对象,以及一些定义在全局对象上的方法(比如Object.assign)都不会转码;因此我们需要polyfill;
-
安装es6-promise【(npm)[https://www.npmjs.com/package/es6-promise]】:这是ES6 Promise的polyfill,一般用来解决在ie9,10,11运行环境下存在的异步兼容性问题。
======>问题依旧存在
- 乖乖定位错误。
根据sourceMap能打开源代码,显示错误的地方。
因为项目是打包后文件,在ie中点开语法错误,展开的内容就是一堆打包编译后的,错误就无法定位了。
所以我们需要在vue.config.vue 文件中设置:productionSourceMap: true,
之后在google浏览器中查看,举个例子(不是本次的错误原因,只是举个栗子):
SourceMap的位置
本次项目是用的vue-cli脚手架,可以在官方文档中查看一下关于SourceMap的配置:
但是:
======>ie好像不支持脚手架的这种改法,依旧无法看到源码,故问题依旧存在。
-
继续定位错误
这次只能从入口文件入手,一步一步排查,直到找到错误的地方。
-
(1)简化app.vue文件。
注释后的app.vueie显示依旧惨兮兮。
页面依旧空白。。。 -
(2) app.vue都没进去,那就在main.js里面注释代码,估计是引入的某个依赖ie不支持?
就有了,把app.vue还原,哈,进入工程了:
注释main.js后的页面显示
然后。。。。一系列排除操作,
竟然是
Vue.use(Toast).use(Indicator).use(Dialog).use(Previewer)
这一行。
当时我就迷茫了,但是搜到网上有ie不识别element-ui关键字的解决办法比如这个,我就涨知识了。
-
求助大佬:
了解到我们项目用的是老版本的hips种子工程,那个时候工程还没有做低版本的适配,于是大佬帮忙,他检查了之后修改了一些配置。
vue.config.js-1
vue.config.js-2
ok。
======>重新yarn install,重新启动项目,问题解决~~~。
网友评论