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 相关文章推荐
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
Feb 14 Javascript
jQuery的学习步骤
Feb 23 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
Jan 09 Javascript
JavaScript建立一个语法高亮输入框实现思路
Feb 26 Javascript
AngularJS学习第二篇 AngularJS依赖注入
Feb 13 Javascript
微信小程序获取手机号授权用户登录功能
Nov 09 Javascript
angularjs $http调用接口的方式详解
Aug 13 Javascript
Angular angular-file-upload文件上传的示例代码
Aug 23 Javascript
JS数组去重的6种方法完整实例
Dec 08 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
Jan 22 Javascript
js绘制一条直线并旋转45度
Aug 21 Javascript
vue点击按钮实现简单页面的切换
Sep 08 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
php通用防注入程序 推荐
2011/02/26 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
js调用AJAX时Get和post的乱码解决方法
2013/06/04 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
Angularjs 基础入门
2014/12/26 Javascript
Js可拖拽放大的层拖动特效实现方法
2015/02/25 Javascript
JavaScript中的getTimezoneOffset()方法使用详解
2015/06/10 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
JS实现简单的二元方程计算器功能示例
2017/01/03 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
详解vue-meta如何让你更优雅的管理头部标签
2018/01/18 Javascript
Vue如何实现响应式系统
2018/07/11 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
Python 文件处理注意事项总结
2017/04/10 Python
python Tkinter的图片刷新实例
2019/06/14 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
python使用正则表达式(Regular Expression)方法超详细
2019/12/30 Python
Python如何使用字符打印照片
2020/01/03 Python
用python制作个音乐下载器
2021/01/30 Python
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
史蒂夫·马登加拿大官网:Steve Madden加拿大
2017/11/18 全球购物
FitFlop美国官网:英国符合人体工学的鞋类品牌
2018/10/05 全球购物
小学教师岗位职责
2013/11/25 职场文书
产品质量保证书
2014/04/29 职场文书
党员反对四风思想汇报范文
2014/10/25 职场文书
女儿满月酒致辞
2015/07/29 职场文书
sql注入报错之注入原理实例解析
2022/06/10 MySQL