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 相关文章推荐
JS 无法通过W3C验证的处理方法
Mar 09 Javascript
JS 修改URL参数(实现代码)
Jul 08 Javascript
实例分析javascript中的call()和apply()方法
Nov 28 Javascript
深入浅析JavaScript中的scrollTop
Jul 11 Javascript
微信小程序  audio音频播放详解及实例
Nov 02 Javascript
canvas学习之API整理笔记(二)
Dec 29 Javascript
javascript添加前置0(补零)的几种方法
Jan 05 Javascript
详解使用Node.js 将txt文件转为Excel文件
Jul 05 Javascript
vue loadmore 组件滑动加载更多源码解析
Jul 19 Javascript
在vue项目中引入vue-beauty操作方法
Feb 11 Javascript
js仿360开机效果
Dec 26 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
Dec 04 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
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
星际原理概述
2020/03/04 星际争霸
介绍几个array库的新函数 php
2006/12/29 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
客户端静态页面玩分页
2006/06/26 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
jquery delay()介绍及使用指南
2014/09/02 Javascript
JavaScript实现更改网页背景与字体颜色的方法
2015/02/02 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
Angular组件化管理实现方法分析
2017/03/17 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
python机器学习之神经网络(一)
2017/12/20 Python
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
2018/02/18 Python
对Python中9种生成新对象的方法总结
2018/05/23 Python
Pyorch之numpy与torch之间相互转换方式
2019/12/31 Python
关于pytorch中全连接神经网络搭建两种模式详解
2020/01/14 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
sklearn的predict_proba使用说明
2020/06/28 Python
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
PHP如何设置和取得Cookie值
2015/06/30 面试题
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
2012/05/30 面试题
函授本科毕业生自我鉴定
2013/10/16 职场文书
党的群众路线教育实践活动总结材料
2014/10/30 职场文书
公司借款担保书
2015/09/22 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
SONY600GR,国产收音机厂商永远的痛
2022/04/05 无线电
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android