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 相关文章推荐
地震发生中逃生十大法则
May 12 Javascript
Javascript倒计时页面跳转实例小结
Sep 11 Javascript
浅析jquery数组删除指定元素的方法:grep()
May 19 Javascript
深入分析javascript中console命令
Aug 14 Javascript
Node.js中常规的文件操作总结
Oct 13 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
Mar 17 Javascript
BootStrap入门学习第一篇
Aug 28 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
May 09 Javascript
Vue 2.0双向绑定原理的实现方法
Oct 23 Javascript
Vue移动端实现图片上传及超过1M压缩上传
Dec 23 Javascript
深入浅析JavaScript中的in关键字和for-in循环
Apr 20 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
Nov 11 Javascript
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
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
js获取指定日期前后的日期代码
2013/08/20 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
2015/06/18 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
JS跨域请求外部服务器的资源
2017/02/06 Javascript
Vue.use源码分析
2017/04/22 Javascript
完美解决浏览器跨域的几种方法(汇总)
2017/05/08 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
vue-cli配置文件——config篇
2018/01/04 Javascript
vue el-table实现自定义表头
2019/12/11 Javascript
ES11屡试不爽的新特性,你用上了几个
2020/10/21 Javascript
详解Vue的异步更新实现原理
2020/12/22 Vue.js
Python中的类学习笔记
2014/09/23 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
Python虚拟环境项目实例
2017/11/20 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
对numpy下的轴交换transpose和swapaxes的示例解读
2019/06/26 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
python列表的逆序遍历实现
2020/04/20 Python
AJAX的全称是什么
2012/11/06 面试题
计算机专业毕业生自荐信
2013/12/31 职场文书
十佳班主任事迹材料
2014/01/18 职场文书
祖国在我心中演讲稿400字
2014/05/04 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
项目经理任命书范本
2014/06/05 职场文书
节能减耗标语
2014/06/21 职场文书
孝敬父母的活动方案
2014/08/31 职场文书
2015年全国“爱牙日”宣传活动总结
2015/03/23 职场文书
2015年学生会部门工作总结
2015/04/21 职场文书