SpringBoot+Vue 前后端合并部署

前后端分离开发项目

前端vue项目

服务端springboot项目

如何将vue的静态资源整合到springboot项目里,通过启动jar包的方式部署服务。

前端项目执行npm run build 命令进行打包,会自动生成打包后的dist目录文件所有东西放置在Resources/static文件下,如下图

 

 

   

此处index.html文件的资源路径(需要在前端打包配置中进行配置)应该如下图:

   

对应的springboot:application.yml需添加:

server:
    port: 8080
    tomcat:
        uri-encoding: UTF-8
spring:
    application:
        name: "xxxx"
    servlet:
        application-display-name: myProject
    mvc:
        static-path-pattern: /static/**

为了解决 vue-router路由的路径无法正常解析

将vue-router中的路径加上统一的前缀“/vueXX”(自定义),然后在springboot项目中自定义过滤器,拦截带“/vueXX”的路径,将请求转发到“/index.html”(将vue的路由资源交给路由处理)。

启动类中需添加:

public class MyProJect {
	public static void main(String[] args) {
		SpringApplication.run(MyProJect.class,args);
	}
	@Bean
	public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer(){
		return factory -> {
			ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/static/index.html");
			factory.addErrorPages(error404Page);
		};
	}
}

 

如果在项目中配置了过滤器:需要在过滤器中去除对应的资源文件后缀的过滤条件。

配置至此,启动项目应该是可以访问到页面。可以在浏览器打开调试工具,查看NetWork下的请求地址是否成功再进行排查。