Vue项目部署在Spring Boot出现页面空白问题的解决方案


Posted in Javascript onNovember 26, 2018

网上流行的解决方案是将assetsPublicPath: '/'改成'./',下面说一下这个解决方案的弊端:

通常页面空白的问题出现大多数是由于Spring Boot端配置了server.servlet.context-path,上下文改变了css, js等文件的访问路径,文件无法加载导致index.html显示空白。'/'改成'./'是将绝对路径变为相对路径,可以动态适应Spring Boot端上下文的改变,这是为什么这个解决方案起作用的原因。

Vue项目部署在Spring Boot出现的另一个常见问题是当刷新浏览器的时候出现white label, 也就是404错误,解决的方案基本是把error page配置成为Vue的index.html。

这两个解决方案有冲突的地方,当router出现子路径的时候刷新浏览器,error page会指向Vue的index.html页面,此时页面中访问css,js文件的路径是相对路径,也就是上下文路径+router子路径,这将导致css,js再次无法正常加载,这就是相对路径的弊端。

由于router会出现子路径,因此必须保证assetsPublicPath为绝对路径,下面讲一下保持绝对路径的解决方案:

1 假设Spring Boot端配置server.servlet.context-path: api, 对应Vue的/config/index.js中assetsPublicPath: '/'改成 '/api/'

2 router/index.js中配置base: '/api/', 这是保证浏览器刷新时上下文参数和router跳转路径一致。

3 对于Ajax请求需要配置baseURL, 如果使用Axios, 可以采用如下方法在main.js中配置

// http request 拦截器
Axios.interceptors.request.use(
config => {
if (localStorage.getItem('id_token')) {
config.headers.Authorization = localStorage.getItem('id_token')
}
config.baseURL = '/api'
return config
},
err => {
return Promise.reject(err)
})

4 另外需要注意的一点,按照Spring Boot默认配置, 在Vue端/config/index.js中assetsSubDirectory: 'static'要改变为其它字符,比如:'content', 'vue', 'api'等等。

5 试过将assetsSubDirectory配置为空,它和另一个css图片加载的方案有冲突,图片加载解决方案是在/build/util.js中加一行配置

// Extract CSS when that option is specified
// (which is the case during production build)
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
fallback: 'vue-style-loader',
publicPath: '../../'
})

结尾附上Spring Boot端将error page指向Vue的index.html代码:

import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.web.server.ConfigurableWebServerFactory;
 import org.springframework.boot.web.server.ErrorPage;
 import org.springframework.boot.web.server.WebServerFactoryCustomizer;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.http.HttpStatus;
 @Configuration
 public class ServletConfig {
   private static final Logger logger = LoggerFactory.getLogger(ServletConfig.class);
   @Bean
   public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer() {
     logger.info("come to 404 error page");
     return factory -> {
       ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/index.html");
       factory.addErrorPages(error404Page);
     };
  }
 }

总结:

以上所述是小编给大家介绍的Vue项目部署在Spring Boot出现页面空白问题的解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript中验证大写字母、数字和中文
Jan 15 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
Mar 27 Javascript
JavaScript对象数组的排序处理方法
Oct 21 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
Jan 19 Javascript
AngulerJS学习之按需动态加载文件
Feb 13 Javascript
原生JS改变透明度实现轮播效果
Mar 24 Javascript
AngularJS的$location使用方法详解
Oct 19 Javascript
基于vue组件实现猜数字游戏
May 28 Javascript
在 Node.js 中使用 async 函数的方法
Nov 17 Javascript
vue.js通过路由实现经典的三栏布局实例代码
Jul 08 Javascript
详解Nuxt.js部署及踩过的坑
Aug 07 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
Jul 03 jQuery
electron制作仿制qq聊天界面的示例代码
Nov 26 #Javascript
Vuex的初探与实战小结
Nov 26 #Javascript
微信小程序页面间值传递的两种方法
Nov 26 #Javascript
Vue中的methods、watch、computed的区别
Nov 26 #Javascript
vue-router懒加载速度缓慢问题及解决方法
Nov 25 #Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
Nov 25 #Javascript
vue中选项卡点击切换且能滑动切换功能的实现代码
Nov 25 #Javascript
You might like
介绍php设计模式中的工厂模式
2008/06/12 PHP
PHP mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
Php 构造函数construct的前下划线是双的_
2009/12/08 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
2019/04/10 PHP
JavaScript对象模型-执行模型
2008/04/28 Javascript
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
深入了解JavaScript中的Symbol的使用方法
2015/07/28 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
2016/02/24 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
关于JavaScript语句后面的分号问题
2017/12/07 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
分享一个vue项目“脚手架”项目的实现步骤
2019/05/26 Javascript
Python是编译运行的验证方法
2015/01/30 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
解决pandas read_csv 读取中文列标题文件报错的问题
2018/06/15 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
详解anaconda离线安装pytorchGPU版
2020/09/08 Python
viagogo波兰票务平台:演唱会、体育比赛、戏剧门票
2018/04/23 全球购物
大学生职业生涯规划书模版
2013/12/30 职场文书
大型活动策划方案
2014/01/12 职场文书
2014年班主任自我评价范文
2014/04/23 职场文书
法院四风对照检查材料思想汇报
2014/10/06 职场文书
2014年质检工作总结
2014/11/26 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫
NASA 机智号火星直升机拍到了毅力号设备碎片
2022/04/29 数码科技