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实现的平方米、亩、公顷单位换算小程序
Aug 11 Javascript
JSON简介以及用法汇总
Feb 21 Javascript
深入理解jQuery layui分页控件的使用
Aug 17 Javascript
JQueryEasyUI之DataGrid数据显示
Nov 23 Javascript
解析AngularJS中get请求URL出现的跨域问题
Dec 01 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
Dec 08 Javascript
基于JQuery及AJAX实现名人名言随机生成器
Feb 10 Javascript
vue-cli+webpack记事本项目创建
Apr 01 Javascript
浅谈vue加载优化策略
Mar 19 Javascript
Vue中util的工具函数实例详解
Jul 08 Javascript
基于Vue CSR的微前端实现方案实践
May 27 Javascript
WebPack工具运行原理及入门教程
Dec 02 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中防止SQL注入攻击和XSS攻击的两个简单方法
2010/04/15 PHP
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
PHP删除字符串中非字母数字字符方法总结
2019/01/20 PHP
JavaScript使用过程中需要注意的地方和一些基本语法
2010/08/26 Javascript
jQuery去掉字符串起始和结尾的空格(多种方法实现)
2013/04/01 Javascript
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
JS密码生成与强度检测完整实例(附demo源码下载)
2016/04/06 Javascript
利用vue.js插入dom节点的方法
2017/03/15 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
jQuery常用选择器详解
2017/07/17 jQuery
JS实现图片拖拽交换效果
2018/11/30 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
一次微信小程序内地图的使用实战记录
2019/09/09 Javascript
Vertx基于EventBus发送接受自定义对象
2020/11/16 Javascript
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python线程详解
2015/06/24 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
基于python判断目录或者文件代码实例
2019/11/29 Python
Python基于requests实现模拟上传文件
2020/04/21 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
CSS实现限制字数功能当对象内文本溢出时显示省略标记
2014/08/20 HTML / CSS
泰国第一在线超市:Tops
2021/02/13 全球购物
上学迟到的检讨书
2014/01/11 职场文书
红领巾广播站广播稿
2014/02/01 职场文书
领导视察通讯稿
2015/07/18 职场文书
新郎结婚感言
2015/07/31 职场文书
导游词之云南省玉龙雪山
2019/12/19 职场文书
微信小程序用户授权最佳实践指南
2021/05/08 Javascript