当前位置: 首页 > 后端技术 > Node.js

在heroku上部署React项目展示

时间:2023-04-03 15:44:49 Node.js

目的是在heroku上部署ReactApp的展示页面,这个ReactApp需要node转发。想着基本的heroku配置可以直接参考文档。如果是简单的不需要node转发的create-react-app项目,可以直接参考官方文档DeployingReactwithZeroConfiguration,顺便附上github项目地址。但是对于需要node转发的项目,这位大哥也给出了解决方案:heroku-cra-node。我们来分析一下它是如何配置的。分析先放目录结构。├──许可证├──README.md├──package-lock.json├──package.json├──react-ui│├──许可证│├──README.md│├──build│├──config│├──doc│├──node-proxy│├──package.json│├──public│├──scripts│├──src│└──tsconfig.json└──服务器└──index.js简单来说就是外面的package.json是node包,react-ui文件夹对应整个react项目。我项目中的外层package.json如下Heroku上的节点API","engines":{"node":"6.11.x"},"scripts":{"start":"nodeserver","heroku-postbuild":"cdreact-ui/&&npm安装&&npmrunbuild"},"cacheDirectories":["node_modules","react-ui/node_modules"],"dependencies":{"express":"^4.14.1","superagent":"^3.8.2"},"repository":{"type":"git","url":"https://github.com/mars/heroku-cra-node.git"},"keywords":["node","heroku","create-react-app","react"],"license":"MIT","devDependencies":{}}适用于heroku的是以下两个“脚本”:{“start”:"nodeserver","heroku-postbuild":"cdreact-ui/&&npminstall&&npmrunbuild"},heroku检测到这是一个nodejs项目后,会自动执行npmstart,开启转发服务。这里的heroku-postbuild使用了npm的post-hook。依赖安装完成后,在npmstart之前,需要先在heroku环境下执行。npmrunheroku,此时会调用命令heroku-postbuild。官方解释还有"cacheDirectories":["node_modules","react-ui/node_modules"],根据文档,作用是将下载的npm缓存到heroku包上,不用重新npmi每次更新server/index.jsapp.set('port',(process.env.PORT||8081))app.use(express.static(path.resolve(__dirname,'../react-ui/build')));重点是这两句,第一句是指定端口,如果部署在heroku中,端口是动态分配的,所以使用process.env。PORT,如果是本地的,会自动改成8081。第二句是指定静态文件的位置。总结以上文件配置好后,推送到heroku,然后打开heroku。