Spring Boot + Vue开发的项目一般采用前后分体的方式,一般部署如下所示:

7f6dca0a82004e73b285ea0e557a2fd0

但有的时候受限于实际资源,比如希望降低硬件使用数量,希望降低运维成本等等,而不能做到前后端分离。这时候可以将Spring Boot + Vue一块打包到Spring Boot的 fat jar中,然后部署启动也是可以的。Vue+ SpringBoot打成一个包的部署图:

集群版:

b1915b7138aa4e0da748e23e101bf86f

更简单的单体版

ceabaef6fac04c39b742e394efba9d92

解决方案

发布SpringBoot+Vue 的前后端混合包,有2种方案。

第一种前后端都几乎不需要做任何调整。但是对于修改前端配置,比如后台服务的地址,打包后无法修改。对部署不友好,换一台服务器部署,前后端都需要重新打包。

第二种方案前后端都需要微调下。但是对部署友好,配置可以根据需要更改。

先说第一种方案。

第一种方案

直接将Vue前端编译好的文件copy到SpringBoot Maven工程下 src/main/resources/static目录下。

Vue前端编译命令:

npm run build

打包前请配置后台服务地址,一般会放在一个js文件文件中,比如在 global.js中:

BASE_URL=http://你要发布的服务器Ip或者域名/端口号

端口号一定要与Spring Boot服务的端口号保持一致。

编辑成功后的文件在dist目录下

vue-project|-dist

将dist目录下所有的文件都拷贝到SpringBoot Maven工程下 src/main/resources/static目录下

springboot-project|-src    |-main        |-resoures            |-static

然后将Spring Boot工程打包为 fat jar,发布部署就可以了。如果没有出现差错就能正常访问了。

很简单不是。但缺点也很明显就是换了服务器部署,或者IP、域名变化了。由于Vue前端后台服务地址也通过webpack打包了,导致无法修改。所以还得重新上述过程。非常麻烦。对于运维很不友好。

在接下来的第二个方案中,vue前端编译后的文件和fat jar分离的方式,解决前配置在打包后无法修改的问题。

第二种方案

Vue前端修改

前端工程目录(部分)结构:

vue-project|-dist|-static|   |-config.json|-src|   |-main.js

1,创建配置文件

在Vue前端工程static目录()创建config.json文件,后台服务地址配置在这里:

BASE_URL=http://你要发布的服务器Ip或者域名/端口号

static目录及目录徐奥的的所有文件在webpack打包时,会原封不动的copy到打包的目的目录dist下,所以可以把后台服务的地址配置文件放在这里,发布后如果服务地址有变,就可以在config.json中修改后台服务地址。

2,从配置文件config.json中获取配置并设置为可以.vue和.js文件中可以全局引用的变量

修改main.js

import Vue from 'vue'import axios from 'axios';import App from './App'import router from './router'import api from './http'import i18n from './i18n'import store from './store'import vbus from '@/utils/vue-bus'import ElementUI from 'element-ui'import 'element-ui/lib/theme-chalk/index.css'import 'font-awesome/css/font-awesome.min.css'​let startApp = function () {  axios.get('/settle/static/config.json').then(res => {    // 服务地址    Vue.prototype.BASE_URL = res.data.BASE_URL​    Vue.use(ElementUI) // 注册使用Element    Vue.use(api) // 注册使用API模块    Vue.use(vbus) //注册事件总线​    const vue = new Vue({      el: '#app',      i18n,      router,      store,      render: h => h(App)    })  })}startApp()

其中核心代码为:

 axios.get('/static/config.json').then(res => {    // 服务地址    Vue.prototype.BASE_URL = res.data.BASE_URL  })

使用axios从static目录获取配置的服务地址,并注册为全局变量。

.vue文件中使用

let url = this.BASE_URL

.js文件中使用:

import Vue from 'vue'let url = Vue.prototype.BASE_URL

以axios封装为例

import Vue from 'vue'export default function $axios(options) {  return new Promise((resolve, reject) => {    const instance = axios.create({      baseURL: Vue.prototype.BASE_URL,      headers: config.headers,      timeout: config.timeout,      withCredentials: config.withCredentials    })....
Spring Boot服务端

将后台服务打包后的fat jar和Vue前端编译后的文件,放到如图所示的文件位置,如图所示:

-|-springbootFatjar.jar|-config # 配置文件放到这里|   |-application.properties |-static # vue编译的后文件放到这里|   |-index.html           |   |   |-config.json|   |   |-css|   |   |-js|   |   |-fonts|   |   |-img

1,Spring Boot fat jar启动时会优先加载config目录下的配置文件。

2,将Vue前端编译后文件放到static目录下。在config.json修改后台服务地址:

BASE_URL=http://你要发布的服务器Ip或者域名/端口号

其中端口号就SpringBooot微服务web 端口号。

启动springbootFatjar.jar后, 就可以通过如下地址访问到引用了。

http://你要发布的服务器Ip或者域名/端口号 

Maven配合maven-assembly-plugin插件可以使打包自动化。在这里不再赘述了。

GitHub 加速计划 / vu / vue
207.54 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:2 个月前 )
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 4 个月前
e428d891 Updated Browser Compatibility reference. The previous currently returns HTTP 404. 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐