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 页面执行时间计算代码
Mar 04 Javascript
jQuery hover 延时器实现代码
Mar 12 Javascript
window.location 对象所包含的属性
Oct 10 Javascript
jQuery+CSS3实现树叶飘落特效
Feb 01 Javascript
Jquery解析json字符串及json数组的方法
May 29 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
Oct 12 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
Aug 31 Javascript
JavaScript奇技淫巧44招【实用】
Dec 11 Javascript
vue-cli扩展多模块打包的示例代码
Apr 09 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
Nov 30 Javascript
详解在React-Native中持久化redux数据
May 22 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
Dec 29 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 字符串函数收集
2010/03/29 PHP
解决PHP超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
2014/07/15 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
FF IE浏览器修改标签透明度的方法
2014/01/27 Javascript
javascript跨域总结之window.name实现的跨域数据传输
2015/11/01 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
2016/12/13 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
Angular 2.x学习教程之结构指令详解
2017/05/25 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
2017/10/30 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
2019/09/01 Javascript
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
python数据结构之列表和元组的详解
2017/09/23 Python
Python wxpython模块响应鼠标拖动事件操作示例
2018/08/23 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
Python 去除字符串中指定字符串
2020/03/05 Python
Python基于yield遍历多个可迭代对象
2020/03/12 Python
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
汉森批发:Hansen Wholesale
2018/05/24 全球购物
Otticanet美国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
Nanushka官网:匈牙利服装品牌
2019/08/14 全球购物
授权委托书格式模板
2014/04/03 职场文书
廉洁校园实施方案
2014/05/25 职场文书
党性观念心得体会
2014/09/03 职场文书
财政局党的群众路线教育实践活动整改方案
2014/09/21 职场文书
群众路线对照检查材料
2014/09/22 职场文书
伊索寓言读书笔记
2015/06/30 职场文书
培训感想范文
2015/08/07 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis