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获取当页面上鼠标光标位置和触发事件的对象的代码
Dec 09 Javascript
javascript nextSibling 与 getNextElement(node) 使用介绍
Oct 13 Javascript
javascript实现的一个带下拉框功能的文本框
May 08 Javascript
javascript学习笔记(七)Ajax和Http状态码
Oct 08 Javascript
JavaScript实现模仿桌面窗口的方法
Jul 18 Javascript
微信小程序加载更多 点击查看更多
Nov 29 Javascript
jQuery实现两列等高并自适应高度
Dec 22 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
Aug 06 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
Sep 05 jQuery
vue2 设置router-view默认路径的实例
Sep 20 Javascript
react 生命周期实例分析
May 18 Javascript
vue 项目@change多个参数传值多个事件的操作
Jan 29 Vue.js
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
第十四节 命名空间 [14]
2006/10/09 PHP
PHP与SQL注入攻击[一]
2007/04/17 PHP
ThinkPHP模板判断输出Defined标签用法详解
2014/06/30 PHP
PDO::errorCode讲解
2019/01/28 PHP
php5与php7的区别点总结
2019/10/11 PHP
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
离开页面时检测表单元素是否被修改,提示保存的js代码
2010/08/25 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
javascript事件函数中获得事件源的两种不错方法
2014/03/17 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
2015/04/16 Javascript
Jquery ajax基础教程
2015/11/20 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
bootstrap 路径导航 分页 进度条的实例代码
2018/08/06 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
详解vue开发中调用微信jssdk的问题
2019/04/16 Javascript
小程序api实现promise封装过程解析
2019/11/21 Javascript
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
python下10个简单实例代码
2017/11/15 Python
python3实现爬取淘宝美食代码分享
2018/09/23 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
春节到了 教你使用python来抢票回家
2020/01/06 Python
Pytorch 实现focal_loss 多类别和二分类示例
2020/01/14 Python
Pycharm调试程序技巧小结
2020/08/08 Python
python打包生成so文件的实现
2020/10/30 Python
四年的大学生生活自我评价
2013/12/09 职场文书
关于赌博的检讨书
2014/01/08 职场文书
医疗专业毕业生求职信
2014/08/28 职场文书
诉讼授权委托书范本
2014/10/05 职场文书
Java 在生活中的 10 大应用
2021/11/02 Java/Android