SpringBoot集成vue的開(kāi)發(fā)解決方案
最近由于工作要求:前端采用vue開(kāi)發(fā),后端采用springboot開(kāi)發(fā),前后端分離開(kāi)發(fā),最后前端頁(yè)面又整合到后端來(lái)。經(jīng)歷多次采坑,總結(jié)以下方案:
vue build后的文件部署到springboot目錄
vue打包后,會(huì)生成dist目錄
springboot靜態(tài)資源目錄如下:
SpringBoot處理靜態(tài)資源和頁(yè)面,設(shè)置如下:
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); super.addResourceHandlers(registry); }
頁(yè)面模板設(shè)置,如下:
#頁(yè)面模板設(shè)置 spring.thymeleaf.option=classpath:/templates/ spring.thymeleaf.suffix=.html spring.thymeleaf.mode=HTML5 spring.thymeleaf.encoding=UTF-8 spring.thymeleaf.content-type=text/html spring.thymeleaf.cache=false
部署方案:
dist的index.html 直接放在templates目錄下
dist的css、fonts、img、js 直接放在static目錄下
vue打包后vendor文件過(guò)大的優(yōu)化方案
vue使用vue-cli打包后,vendor就將vue.js其他引用的包一起壓縮打包進(jìn)去,導(dǎo)致vendor文件超過(guò)1M,影響頁(yè)面加載速度
本項(xiàng)目使用了vue、vue-router、iview、axios、echarts等
(1)使用vue、vue-router、iview、axios、echarts等cnd引用
在index.html文件中,增加:
<script src="https://unpkg.com/vue@2.5.2/dist/vue.min.js"></script> <script src="https://unpkg.com/vue-router@3.0.1/dist/vue-router.min.js"></script> <script src="https://unpkg.com/iview@3.4.0/dist/iview.min.js"></script> <script src="https://unpkg.com/axios@0.18.0/dist/axios.min.js"></script> <script src="https://unpkg.com/echarts@4.2.1/dist/echarts.min.js"></script>
(2)打包時(shí),排除vue、vue-router、iview、axios、echarts等打包
在webpack.base.conf.js文件中,module.exports={…} 方法中添加
module.exports = { ... externals:{ 'vue':'Vue', 'axios':'axios', 'vue-router':'VueRouter', 'iview':'iview', 'echarts':'echarts', }, ... }
這里有注意的是:命名問(wèn)題
比如:vue-router的在https://unpkg.com/vue-router@3.0.1/dist/vue-router.min.js中默認(rèn)采用VueRouter,所以在import vue-router一定要使用VueRouter,而不能使用其他別名。
vue默認(rèn)別名是Vue
axios默認(rèn)別名是axios
vue-router默認(rèn)別名是VueRouter
iview默認(rèn)別名是iview
echarts默認(rèn)別名是echarts
例子:
import Vue from 'vue' import VueRouter from 'vue-router' import iview from 'iview' import echarts from 'echarts' Vue.use(VueRouter) export default new VueRouter({ mode: 'history', ... })
(3)vue-router的路由頁(yè)面設(shè)置為按需加載
export default new VueRouter({ mode: 'history', routes: [ //頁(yè)面1 { path: '/Page1', name: 'page1', component: () => import('@/views/Page1.vue') }, //頁(yè)面2 { path: '/Page2', name: 'page2', component: () => import('@/views/Page2.vue') } ] });
(4)重新打包后vendor.js文件就小了,可以小到1k哦
vue-router使用了history模式,vue其實(shí)做的是單頁(yè)面應(yīng)用,但是效果看上去是多個(gè)不同頁(yè)面,問(wèn)題來(lái)了,部署到線上環(huán)境后,該如何配置?
百度上有很多處理方案,比如:使用errorPage方式處理,nginx配置等,這些問(wèn)題比較繁瑣,而且在部署過(guò)程中,一堆問(wèn)題。
經(jīng)過(guò)多次嘗試,發(fā)現(xiàn)有一個(gè)最簡(jiǎn)單方法,Controller直接url路徑配置到index.html即可,而且輕松解決history模式帶來(lái)的后端問(wèn)題,如下:
@ApiOperation(value = "", hidden = true) @RequestMapping(path = "/Page1") public String page1() { return "index"; } @ApiOperation(value = "", hidden = true) @RequestMapping(path = "/Page2") public String page2() { return "index"; }
這種方案非常有利于后端開(kāi)發(fā)人員做更多的進(jìn)一步操作,比如:給每個(gè)頁(yè)面增加頁(yè)面權(quán)限等。
注意:該方案目前適用于前端頁(yè)面整合到后端的項(xiàng)目工程。
到此這篇關(guān)于SpringBoot集成vue的開(kāi)發(fā)解決方案的文章就介紹到這了,更多相關(guān)SpringBoot集成vue內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- spring boot+vue 的前后端分離與合并方案實(shí)例詳解
- vue+springboot前后端分離實(shí)現(xiàn)單點(diǎn)登錄跨域問(wèn)題解決方法
- 如何把vuejs打包出來(lái)的文件整合到springboot里
- vue+springboot實(shí)現(xiàn)項(xiàng)目的CORS跨域請(qǐng)求
- 使用springboot結(jié)合vue實(shí)現(xiàn)sso單點(diǎn)登錄
- springboot整合vue項(xiàng)目(小試牛刀)
- 解決Vue調(diào)用springboot接口403跨域問(wèn)題
- Springboot項(xiàng)目與vue項(xiàng)目整合打包的實(shí)現(xiàn)方式
- 部署vue+Springboot前后端分離項(xiàng)目的步驟實(shí)現(xiàn)
- springboot整合vue實(shí)現(xiàn)上傳下載文件
相關(guān)文章
JavaWeb入門(mén):ServletContext詳解和應(yīng)用
這篇文章主要介紹了Java ServletContext對(duì)象用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-07-07Java利用happen-before規(guī)則如何實(shí)現(xiàn)共享變量的同步操作詳解
這篇文章主要給大家介紹了關(guān)于Java利用happen-before規(guī)則實(shí)現(xiàn)共享變量的同步操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06Mybatis使用@one和@Many實(shí)現(xiàn)一對(duì)一及一對(duì)多關(guān)聯(lián)查詢
本文主要介紹了Mybatis使用@one和@Many實(shí)現(xiàn)一對(duì)一及一對(duì)多關(guān)聯(lián)查詢,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09MyBatis 如何配置多個(gè)別名 typeAliasesPackage
這篇文章主要介紹了MyBatis 如何配置多個(gè)別名 typeAliasesPackage,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01SpringBoot結(jié)合Redis實(shí)現(xiàn)接口冪等性的示例代碼
本文主要介紹了SpringBoot結(jié)合Redis實(shí)現(xiàn)接口冪等性的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06Spring Cloud Alibaba和Dubbo融合實(shí)現(xiàn)
這篇文章主要介紹了Spring Cloud Alibaba和Dubbo融合實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04Java8新特性之深入解析日期和時(shí)間_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java8新特性之深入解析日期和時(shí)間_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下2017-06-06SpringBoot整合JPA詳細(xì)代碼實(shí)例
這篇文章主要給大家介紹了關(guān)于SpringBoot整合JPA的相關(guān)資料,JPA(Java Persistence API)是Sun官方提出的Java持久化規(guī)范,它為Java開(kāi)發(fā)人員提供了一種對(duì)象/關(guān)聯(lián)映射工具來(lái)管理Java應(yīng)用中的關(guān)系數(shù)據(jù),需要的朋友可以參考下2024-05-05Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之KMP算法
在很多地方也都經(jīng)常看到講解KMP算法的文章,看久了好像也知道是怎么一回事,但總感覺(jué)有些地方自己還是沒(méi)有完全懂明白。這兩天花了點(diǎn)時(shí)間總結(jié)一下,有點(diǎn)小體會(huì),我希望可以通過(guò)我自己的語(yǔ)言來(lái)把這個(gè)算法的一些細(xì)節(jié)梳理清楚,也算是考驗(yàn)一下自己有真正理解這個(gè)算法2022-02-02