Spring Boot與React集成的示例代碼
前言
前不久學習了Web開發(fā),用React寫了前端,Spring Boot搭建了后端,然而沒有成功地把兩個工程結合起來,造成前端與后端之間需要跨域通信,帶來了一些額外的工作。
這一次成功地將前端工程與后端結合在一個Project中,記錄一下,也希望能幫到那些和我一樣的入門小白。
環(huán)境
Windows 10 - x64, Java 1.8.0, node v8.9.4, npm 6.1.0
前奏
*JDK, Node 和 NPM請自行安裝
新建一個Spring Boot工程
在Intellij里選擇Spring Initializer新建,

依賴添加devTool和Web

隨后就初始化了后端的Spring boot項目
在Spring boot項目的文件夾內(nèi),新建一個React工程,推薦用create-react-app,沒有的話通過npm安裝到全局
// npm install -g create-react-app create-react-app frontene
主曲
添加Maven插件frontend-maven-plugin
<plugins> <plugin> <!-- https://mvnrepository.com/artifact/com.github.eirslett/frontend-maven-plugin --> <groupId>com.github.eirslett</groupId> <artifactId>frontend-maven-plugin</artifactId> <version>1.6</version> ... </plugin> </plugins>
frontend-maven-plugin可以在打包時build react項目,并將build得到的前端頁面文件放入指定位置。
配置frontend-maven-plugin
<executions>
<execution>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<configuration>
<nodeVersion>v8.11.1</nodeVersion>
<npmVersion>5.6.0</npmVersion>
<nodeDownloadRoot>http://npm.taobao.org/mirrors/node/</nodeDownloadRoot>
<!--<npmDownloadRoot>http://npm.taobao.org/mirrors/npm/</npmDownloadRoot>-->
</configuration>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
<execution>
<id>npm run-script build</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>run-script build</arguments>
</configuration>
</execution>
</executions>
<configuration>
<installDirectory>target</installDirectory>
<workingDirectory>frontend</workingDirectory>
</configuration>
Maven這一插件會依次執(zhí)行install-node-and-npm, npm install, npm run-script build三條命令。
配置中的installDirectory指定了node和npm的安裝位置,在jar包中安裝node和npm確保在沒有安裝node和npm的機器上jar包依然可以運行,如果安裝了則會屏蔽全局的node和npm。
WorkingDirectory值為前端項目package.json文件所在路徑,插件會自動在workingDirectory下運行npm install和npm run-script build命令。
Webpack 配置
通過create-react-app生成的項目里并沒有webpack的配置,在frontend里npm run eject,會彈出許多個文件夾,config下可以看見與webpack相關的多個配置文件。
這里需要修改paths.js 中的 module.exports = { ... },修改后如下
module.exports = {
dotenv: resolveApp('.env'),
appBuild: resolveApp('../src/main/resources/static/'), // 設置build所產(chǎn)生的文件的放置位置
appPublic: resolveApp('../src/main/resources/static/'), // 設置public文件夾內(nèi)文件在build后的存放位置
appHtml: resolveApp('public/index.html'),
appIndexJs: resolveApp('src/index.js'),
appPackageJson: resolveApp('package.json'),
appSrc: resolveApp('src'),
yarnLockFile: resolveApp('yarn.lock'),
testsSetup: resolveApp('src/setupTests.js'),
appNodeModules: resolveApp('node_modules'),
publicUrl: getPublicUrl(resolveApp('package.json')),
servedPath: getServedPath(resolveApp('package.json')),
};
尾聲
前后端工程結合通過以上一些操作就可以實現(xiàn)一個工程開發(fā),同時前后端仍然是解耦的,僅測試前端效果只需要在前端文件下用node運行。
實踐證明,在前端應用react-router并不需要對后端作其他配置。
這篇博文只是將Spring Boot和React結合到一個項目里的一次簡單的嘗試,本人Web開發(fā)并不精通,懇請高手斧正。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
java實戰(zhàn)之飛機大戰(zhàn)小游戲(源碼加注釋)
這篇文章主要介紹了java實戰(zhàn)之飛機大戰(zhàn)小游戲(源碼加注釋),文中有非常詳細的代碼示例,對正在學習java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04
springmvc HttpServletRequest 如何獲取c:forEach的值
這篇文章主要介紹了springmvc HttpServletRequest 如何獲取c:forEach的值方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
Java使用poi-tl1.9.1生成Word文檔的技巧分享
本文將簡單介紹poi-tl的相關知識,通過一個實際的案例實踐,充分介紹如何利用poi-tl進行目標文檔的生成,同時分享幾個不同的office版本如何進行圖表生成的解決方案,需要的朋友可以參考下2023-09-09
Java中有界隊列的飽和策略(reject policy)原理解析
這篇文章主要介紹了Java中有界隊列的飽和策略(reject policy)原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04
SpringBoot整合Echarts繪制靜態(tài)數(shù)據(jù)柱狀圖和餅圖
這篇文章給大家介紹了SpringBoot整合Echarts繪制靜態(tài)數(shù)據(jù)柱狀圖和餅圖,文中通過代碼示例給大家介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下2024-03-03

