Reactjs 关于用于部署的完整堆栈应用程序的文件结构的问题
我对开发和部署全堆栈应用程序还很陌生,所以我有几个问题一直很难找到答案 我目前有2个项目。一个Express/NodeJS后端项目,包含我的API(使用Express generator生成),运行在端口9000上,我使用npm start运行该端口。 其文件结构如下: 然后,我的前端有一个单独的React项目(使用createreact应用程序生成),运行在端口3000上,我使用npmstart运行该端口 其文件结构如下: 当我要部署它时,无论是在Heroku还是AWS上,它都需要是一个包含前端和后端项目的整合项目,对吗?我看到的项目布局基本上是React app+1后端文件,如下所示:Reactjs 关于用于部署的完整堆栈应用程序的文件结构的问题,reactjs,express,deployment,web-deployment,mern,Reactjs,Express,Deployment,Web Deployment,Mern,我对开发和部署全堆栈应用程序还很陌生,所以我有几个问题一直很难找到答案 我目前有2个项目。一个Express/NodeJS后端项目,包含我的API(使用Express generator生成),运行在端口9000上,我使用npm start运行该端口。 其文件结构如下: 然后,我的前端有一个单独的React项目(使用createreact应用程序生成),运行在端口3000上,我使用npmstart运行该端口 其文件结构如下: 当我要部署它时,无论是在Heroku还是AWS上,它都需要是一个包
"scripts": {
"start": "node ./bin/www"
}
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
在我的front end package.json中,我有以下脚本:
"scripts": {
"start": "node ./bin/www"
}
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
我可以想象,如果这两个项目要合并,启动脚本将需要修改以同时运行这两个项目
有兴趣学习fullstack应用程序文件结构的最佳实践(在本例中,MERN stack只是没有Mongo)。非常感谢您的任何建议,谢谢
要将我的两个应用程序(React App和Express API)部署为一个网站,我是否需要将它们作为一个项目
不可以。您甚至可以将它们部署到不同的域,并将前端视为另一种产品。将这两个应用程序保存在同一个Git存储库中是有好处的
如果1为“是”,那么为什么人们使用create react应用程序和
如果最终没有给您留下
fullstack应用程序的文件结构
人们使用CRA是因为这是Facebook的默认方式,而且很有效。但许多人使用类似于或其他样板文件的框架进行服务器端渲染
是否有任何指南说明如何组合(从字面意义上来说)
文件结构,因为这两个应用程序已经可以很好地通信了
使用express generator创建的应用程序和创建react应用程序
如果您只是通过API进行通信,请将两者保存在不同的文件夹中
对于React,您无论如何都要创建一个优化的节点(您不需要在服务器中不断运行节点来提供最终的html和Javascript文件)
对于后端,即使您使用另一种语言,也可以像使用静态html一样正常部署。您不需要将React和Express项目作为单个项目。在开发模式中,您分别启动两个项目。在生产中,您需要构建React应用程序,并将其放入Express项目的
public
目录中。Express将包含您的React项目作为一组静态文件。@KenBekov哦,我真的没有想到这一点。所以你的意思是,即使我有两个独立的开发项目,我也只需要部署express应用程序,它会有一个静态的前端集(构建)来为它服务?我是否应该使用任何特定的工具将我客户的构建放入express应用程序,或者我只是运行npm run build,然后将dist文件夹复制到express应用程序的bin或其他位置?感谢您的评论:)您可以手动构建和复制React应用程序。如果您使用任何像Jenkins这样的持续集成工具,您可以设置该工具来自动构建和部署应用程序。感谢您的回复,它提供了非常丰富的信息。我想我会尝试分别部署它们,并让它们在不同的域上通信。要明确的是,如果我将后端托管在某台ec2服务器上的AWS上,然后为我的前端使用一个单独的后端(并执行必要的步骤以使用我的自定义域名屏蔽AWS url),我的前端仍然能够从myDomain.com向backend-ec2-instance.AWS.com发出请求?在我的express应用程序中,我有一行“app.use(cors());”。这就是允许这些跨域请求的原因吗?再次感谢。虽然您可以使用不同的域,但这取决于您和您的需要。例如,在我的应用程序中,我为所有api(由php处理)保留domain.com/api/…
。所有剩余路由domain.com/foo…
由react路由器处理,可能导致404错误页面。php
、build
和public
文件夹位于同一服务器上。