VUE 2.0 开发单页项目-部分手机浏览器页面显示空白解决方案

使用vue开发过一段时间了,采用 Vue-cli脚手架中出现一些页面空白问题的解决方法总汇

1.npm run build打包页面空白

我们会发现页面head中引用的js和css文件是出现了路径错误,这里修改如下:

解决位置:config/index.js文件:把assetsPublicPath: '/'改为assetsPublicPath: './'

build: {assetsPublicPath:'./',}

2. iOS的Safari下无法打开网页

webpack-dev-server >= 2.8.0 的版本在 iOS Safari 下无法打开网页,效果为白屏。 

控制台报错:Can't find variable: SockJS 应该是 Safari 的 BUG,比如下面的代码就会抛出 

Erroreval("const a = function () {}; function b() { a(); }; b();")

解决方法

1.使用老版本:

yarnaddwebpack-dev-server@~2.7.0-D

2.其它方法

yarnadd babel-plugin-transform-es2015-block-scoping -D

修改 webpack 相关配置

{test: /\.js$/,  loader:'babel-loader',  include: [    ...,    /node_modules\/webpack-dev-server/  ]}

3.升级vue2+部分手机访问出现页面空白

npm run dev后可能出现无法加载到路由模板的信息。

解决位置:config/index.js文件:把 devtool: '#eval-source-map'  改为devtool:'inline-source-map'

dev: {devtool:'inline-source-map',}

4.升级vue2+IP访问页面空白

默认只能通过localhost或者127.0.0.1才能访问,如果使用本机的Ip地址会出现无法访问到的情况。

解决位置:config/index.js文件:把config/index.js中“host” 配置为“0.0.0.0”就可以解决,或者设置为你电脑的IP地址也行:

dev: {host:'192.168.10.122', }

5.Vue在IE、低版本Android显示空白问题

这是由于IE对promise的支持不好,我们需要安装:babel-polyfill和es6-promise:

npminstall babel-polyfillnpm install es6-promise

然后在main.js文件中引用:

import'babel-polyfill'importVuefrom'vue'importEs6Promisefrom'es6-promise'Es6Promise.polyfill()

最后 build/webpack.base.conf.js 文件中配置如下:

module.exports = {entry: {app: ["babel-polyfill","./src/main.js"]    }};

6.Vue只在iOS 10出现白屏问题

a:出现变量定义两次的错误描述,如下:

SyntaxError: Cannot declare aletvariable twice

原因是由于ios 10中Safari中错误描述如下:当你定义一个与参数同名的for循环迭代变量时,我们错误地认为这是一个语法错误。解决方法如下:

找到webpack.prod.conf.js文件,在UglifyPlugin的定义里添加关于mangle的选项

newUglifyJsPlugin({      

    uglifyOptions: {       

         compress: {         

         warnings:false

        },        

        mangle: {          

            safari10:true

          }      

        },      

    sourceMap: config.build.productionSourceMap,      

    parallel:true

}),

b:使用Swiper插件:这是由于Swiper插件中用到了ES6的语法a = b ** c,a是b的c次方,而iOS 10的Safari里不认识这样的语法,认为这是一个错误,所以你需要让Swiper经过babel的包装,而缺省状态下babel是不对node_modules里的模块进行编译的。解决方法是在项目根目录下新建一个文件vue.config.js,在里面添加如下语句:

module.exports = {chainWebpack:config=>{    config.rule('js').include.add(/node_modules\/(dom7|swiper)\/.*/)  }}

推荐阅读更多精彩内容

  • 1 Webpack 1.1 概念简介 1.1.1 WebPack是什么 1、一个打包工具 2、一个模块加载工具 3...
    Kevin_Junbaozi阅读 5,074评论 0 16
  • ## 框架和库的区别?> 框架(framework):一套完整的软件设计架构和**解决方案**。> > 库(lib...
    Rui_bdad阅读 2,160评论 1 4
  • 天街小雨润如酥,草色遥看近却无... 新年在家,短短的几声春雷炸响,仿佛是春天在向大家宣誓着她的到来...细细绵绵...
    闪了腰的企鹅阅读 92评论 0 0
  • 现在的我是成年人,即使还是一名学生,但也是应该负责任,能够自己对自己负责任的成年人了。两个人在一起是为了什么? 因...
    小智z阅读 66评论 0 0
  • 阳春三月冰未融, 冰天一色风尚冷。 冬眷大地不敛寒, 春恋百花万物生! ——小叶白杨
    小叶白杨阅读 97评论 0 0