Vue-cli3与springboot项目整合打包

一、需求

       使用前后端分离编写了个小程序,前端使用的是vue-cli3创建的项目,后端使用的是springboot创建的项目,部署的时候一起打包部署,本文对一些细节部分进行了说明。  

二、Vue项目具体配置

      (1) vue正常开发时随意,在打包时候,有些配置需要和后端保持一致       (2)配置生产时环境变量: (file:  .env.production),   .env.production是我自己配置的生产时环境变量,可以自己创建(具体可以参考:vue-cli3环境配置),也可以忽略这个,直接在下面两步中填写,例如,在axios的配置中,可以直接配置成Axios.defaults.baseURL = '/app_name/v1'  
NODE_ENV = 'production'
VUE_APP_BASE_URL= /app_name/v1
VUE_APP_CONTEXT=/pre-lcas
VUE_APP_ASSETS=static 

 

  1. VUE_APP_BASE_URL
          用于给所有http请求指定起始路径,前端项目中使用axios组件支持http请求,在axios的配置文件中指定Axios.defaults.baseURL = process.env.VUE_APP_BASE_URL, 这样原本通过代理与后台进行的请求,都会加上`/app_name/v1`,             例如: 在前端代码中使用的是: axios.get('/reqUrl/abc')......  向后台发起请求,根据上面配置后,打包后的工程请求路径会变成 {http://xxx:xx/app_name/v1/reqUrl/abc} 可以通过这个配置,匹配前端请求。  
  1. VUE_APP_CONTEXT和VUE_APP_ASSETS
        用于设置打包后的成果物相关信息,在配置文件vue.config.js中使用,配置方式如下:
module.exports = {
  // 设置路径
  publicPath: process.env.VUE_APP_CONTEXT,
  assetsDir: process.env.VUE_APP_ASSETS,
......
}
publicPath和assetsDir的作用可以参考官网,如果assetsDir不配置,默认会把index.html文件和css等目录都放到static目录下,这样复制springboot项目下会出现无法访问静态资源的问题,尝试了几种方法,还是将assetsDir配置成static比较好。打包后的资源目录结构如下:
dist
--static
----css
----fonts
----img
----js
--favicon.ico
--index.html
复杂的时候,将static文件夹复制到springboot的/src/main/resource下,将favicon.ico和index.html也复制到static目录下。如果springboot是多module工程,静态文件放到启动文件所在模块下的resource目录中。复制后的springboot目录如下:
/src
--main
--|--java
--|--|--com.xx.xx.WebApplication
--|--resource
--|--|--static
--|--|--|--css
--|--|--|--fonts
--|--|--|--img
--|--|--|--js
--|--|--|--favicon.ico
--|--|--|--index.html
--|--|--application.properties

 

三、springboot项目配置

  静态资源复制到springboot后,还是会出现无法访问资源的问题,需要设置资源访问规则。   具体代码是:  
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        WebMvcConfigurer.super.addResourceHandlers(registry);
    }
}

 四、说明

有的文章在前后端分离后再整合打包这个问题上,都说明了两个问题, 一个是要保证整合后静态资源可以被访问到,这个问题需要确保打包是的路径,因为如果打包失误,会在加载index.html时候找不到css/js等资源; 另一个是要保证请求路径的分离,用户看到地址栏的是vue-router中的路径,页面渲染获取数据使用的是axios请求路径,后台开放的是服务路径,一定要确保axios路径与后台开放的服务路径匹配上。   有的文章中提到,需要后端对router中的路径进行处理,我测试的过程中,并没有出现异常,只需要确保axios路径与后台服务路径匹配就可以了。  

参考文章:

vue-cli3.0配置开发环境,测试环境,线上环境(https://blog.csdn.net/qq_37055675/article/details/85047451)   springboot+vue的前后端分离与合并方案( https://my.oschina.net/u/1760791/blog/1577662)   vue-cli配置参考( https://cli.vuejs.org/zh/config/#%E5%85%A8%E5%B1%80-cli-%E9%85%8D%E7%BD%AE)    
上一篇:vue-cli3 vue.config.js 配置


下一篇:vue-cli3+笔记