将React项目作为一项SpringBoot服务部署
随手一记,将全栈进行到底。对前端小伙伴来说在开发及部署的过程中如何将开发完成的react项目打包并作为一项服务运行一定不是问题。部署及配置过程虽不复杂,但也有些许的繁琐。将自己在微服务与react结合的开发打包部署经验记录下来并分享,是一件有意义的事。
1、前端项目配置及打包
在一开始构建前端项目的过程中我使用了脚手架create-react-app,脚手架帮我们配置好了webpack,并将各种功能封装好供我们开发人员使用。如何完美的构建一套react项目的全部流程请参照下文:
兔先森:新构建react项目可以绕过的一些坑其中我还总结了各种小技巧,及常用命令。
回归正题,当我们完成项目的开发后,想要将其部署至伺服器时需要将项目的开发内容进行打包,压缩重要内容,剔除发布后不需要依赖的内容,这时我们可以通过
npm run build
命令实现项目的打包,打包过程中react会进行最优处理,文件大小也会进行优化。执行完后会将js和css单独打包至根目录下的build文件夹内。初始没有配置打包路径会生成dist文件夹,我们可以通过修改node_module中的依赖包,只需要找到react-scripts下的path.js文件修改run build后的路径
function getServedPath(appPackageJson) {
const publicUrl = getPublicUrl(appPackageJson);
const servedUrl =
envPublicUrl || (publicUrl ? url.parse(publicUrl).pathname : /);//修改pathname后面的值即可
return ensureSlash(servedUrl, true);
}
将pathname后面的值进行修改,完成后可以自定义run build路径。
对于npm run build的执行内容,及其执行顺序进行研究发现npm run build的时候第一个执行的文件就是根目录下的package.json ,根据其中的run build命令找到react-scripts build并执行,完毕后执行react-scripts下bin文件中的react-scripts.js 于此同时传入参数,那么根据react-scripts.js 中的逻辑接著会进入到根目录scripts 下的build.js文件(项目eject完毕才会显示build.js文件)。在build.js执行完后会调用webpack.config.dev.js,在该配置文件中去调用一些webpack的载入规则还有webpack的本地server。
最后build完成后,生成的js和css文件还会带上hash值,生成的index.html 可以选择部署在apach tomcat下,也可以选择ngnix,选择ngnix的更多,因为考虑到性能,并发等等原因,ngnix的性能已经在一定程度上略有超越Apache(毕竟自带了负载均衡等功能),但是如果考虑稳定或者部署方便,可以选择Apache tomcat。
但作者两者都不用,因为每位开发人员都可以很轻松的掌握。通过前后端分离最终选型使用微服务进行前端项目的发布,每一项服务单独执行,这样既降低了前端与后台的耦合度,更大大方便了前端与后台的分离开发,提高了生产效率。这么有意义的事,我们当然要大力的推广。
当然要记得在打包前修改本地配置项,将后端服务暴露的地址配置正确,以便打包
class Server {
constructor() {
//服务启动地址
// this.portAddress = "http://1.1.1.1:7075/shiptail/service/";
this.mosaicAddress = this.webAddress + "/geoserver/ws_Mosaic/wms";
this.smallserverAddress = this.smallAddress +"/geoserver/weather/wms";
this.portserverAddress= this.smallAddress+"/geoserver/port/wms";
this.voyageAddress = this.smallAddress+/geoserver/density/wms;
}
}
react的组件化思想要随时牢记,声明一个类暴露出去,使地址能够被axios组件(类似于ajax)调用。
说了这么多,到这里,项目就打包完成了。
2、作为SpringBoot微服务进行部署
在SpringBoot的架构下进行前端服务构建,前端服务的基本结构如下: