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 相关文章推荐
jquery validate在ie8下的bug解决方法
Nov 13 Javascript
使用JS取得焦点(focus)元素代码
Mar 22 Javascript
js判断浏览器类型为ie6时不执行
Jun 15 Javascript
jquery插件orbit.js实现图片折叠轮换特效
Apr 14 Javascript
js操作XML文件的实现方法兼容IE与FireFox
Jun 25 Javascript
详解浏览器渲染页面过程
Feb 09 Javascript
vue自定义底部导航栏Tabbar的实现代码
Sep 03 Javascript
使用JavaScript解析URL的方法示例
Mar 01 Javascript
vue项目实现分页效果
Mar 24 Vue.js
关于vue中如何监听数组变化
Apr 28 Vue.js
JavaScript实现优先级队列
Dec 06 Javascript
vue使用localStorage持久性存储实现评论列表
Apr 14 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
Views rows style模板重写代码
2011/05/16 PHP
CodeIgniter记录错误日志的方法全面总结
2016/05/17 PHP
laravel 自定义常量的两种方案
2019/10/14 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
2020/02/06 PHP
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
潜说js对象和数组
2011/05/25 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
微信小程序 Page()函数详解
2016/10/17 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
Javascript网页抢红包外挂实现分享
2018/01/11 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
小程序实现抽奖动画
2020/04/16 Javascript
vue读取本地的excel文件并显示在网页上方法示例
2019/05/29 Javascript
DatePickerDialog 自定义样式及使用全解
2019/07/09 Javascript
JS实现手风琴特效
2020/11/08 Javascript
[54:54]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
在Python的struct模块中进行数据格式转换的方法
2015/06/17 Python
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
Python批量查询域名是否被注册过
2017/06/21 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
python 整数越界问题详解
2019/06/27 Python
python二进制读写及特殊码同步实现详解
2019/10/11 Python
Tensorflow轻松实现XOR运算的方式
2020/02/03 Python
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
有趣、实用和鼓舞人心的产品:Inspire Uplift
2019/11/05 全球购物
竞选班委演讲稿
2014/04/28 职场文书
保洁公司服务承诺书
2014/05/28 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
劳动合同变更协议书范本
2019/04/18 职场文书
教你怎么用Python监控愉客行车程
2021/04/29 Python
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫