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 相关文章推荐
不用锚点也可以平滑滚动到页面的指定位置实现代码
May 08 Javascript
javascript中数组的concat()方法使用介绍
Dec 18 Javascript
浅析JavaScript基本类型与引用类型
May 28 Javascript
javascript适合移动端的日期时间拾取器
Nov 10 Javascript
使用 bootstrap modal遇到的问题小结
Nov 09 Javascript
javascript ES6中箭头函数注意细节小结
Feb 17 Javascript
原生JS实现不断变化的标签
May 22 Javascript
使用SVG基本操作API的实例讲解
Sep 14 Javascript
angular中ui calendar的一些使用心得(推荐)
Nov 03 Javascript
加载 vue 远程代码的组件实例详解
Nov 20 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
Jan 29 Javascript
vue3弹出层V3Popup实例详解
Jan 04 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
在线竞拍系统的PHP实现框架(一)
2006/10/09 PHP
层叠菜单的动态生成
2006/10/09 PHP
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
高性能PHP框架Symfony2经典入门教程
2014/07/08 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
php让json_encode不自动转义斜杠“/”的方法
2020/04/27 PHP
RR vs IO BO3 第一场2.13
2021/03/10 DOTA
基于Jquery的简单&amp;简陋Tabs插件代码
2010/02/09 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
js 数值转换为3位逗号分隔的示例代码
2014/02/19 Javascript
IE中的File域无法清空使用jQuery重设File域
2014/04/24 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
理解Angular数据双向绑定
2016/01/10 Javascript
JavaScript的兼容性与调试技巧
2016/11/22 Javascript
Jquery Easyui自定义下拉框组件使用详解(21)
2020/12/31 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
2019/04/24 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
python实现删除文件与目录的方法
2014/11/10 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
基于Python下载网络图片方法汇总代码实例
2020/06/24 Python
详解h5页面在不同ios设备上的问题总结
2019/03/01 HTML / CSS
香港太阳眼镜网上商店:SmartBuyGlasses香港
2016/07/22 全球购物
校园摄影活动策划方案
2014/02/05 职场文书
《青山处处埋忠骨》教学反思
2014/04/22 职场文书
四风查摆剖析材料
2014/10/10 职场文书
淘宝好评语句大全
2014/12/31 职场文书
小学感恩节活动总结
2015/03/24 职场文书
2015年幼师工作总结
2015/04/28 职场文书
2016大学军训通讯稿
2015/11/25 职场文书
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js