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 相关文章推荐
【消息提示组件】,兼容IE6/7&amp;&amp;FF2
Sep 04 Javascript
FileUpload上传图片(图片不变形)
Aug 05 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
Feb 23 Javascript
关于jQuery object and DOM element
Apr 15 Javascript
DOM基础教程之使用DOM控制表格
Jan 20 Javascript
原生js和jquery实现图片轮播特效
Apr 23 Javascript
基于jquery步骤进度条源码分享
Nov 12 Javascript
JS实现的颜色实时渐变效果完整实例
Mar 25 Javascript
JavaScript mixin实现多继承的方法详解
Mar 30 Javascript
vue实现点击追加选中样式效果
Nov 01 Javascript
JavaScript异步操作的几种常见处理方法实例总结
May 11 Javascript
如何基于viewport vm适配移动端页面
Nov 13 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&amp;java(一)
2006/10/09 PHP
常用的PHP数据库操作方法(MYSQL版)
2011/06/08 PHP
PHP中redis的用法深入解析
2014/02/20 PHP
PHP的foreach中使用引用时需要注意的一个问题和解决方法
2014/05/29 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
PNG背景在不同浏览器下的应用
2009/06/22 Javascript
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
Javascript 判断客户端浏览器类型代码
2010/03/01 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
NodeJS学习笔记之Http模块
2015/01/13 NodeJs
JavaScript对象属性检查、增加、删除、访问操作实例
2015/07/08 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
2018/05/16 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
2019/03/26 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
Vue数据双向绑定原理实例解析
2020/05/15 Javascript
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
python实现简单温度转换的方法
2015/03/13 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
函授大学生自我鉴定
2014/02/05 职场文书
体育教师求职信
2014/05/24 职场文书
无犯罪记录证明范本
2014/09/15 职场文书
入党宣誓大会后的感想
2015/08/10 职场文书
离婚协议书格式范本
2016/03/18 职场文书
什么是创业计划书?什么是商业计划书?这里一一解答
2019/07/12 职场文书
Python实战之实现简易的学生选课系统
2021/05/25 Python
Docker安装MySql8并远程访问的实现
2022/07/07 Servers