Reactjs 关于用于部署的完整堆栈应用程序的文件结构的问题

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上,它都需要是一个包

我对开发和部署全堆栈应用程序还很陌生,所以我有几个问题一直很难找到答案

我目前有2个项目。一个Express/NodeJS后端项目,包含我的API(使用Express generator生成),运行在端口9000上,我使用npm start运行该端口。 其文件结构如下:

然后,我的前端有一个单独的React项目(使用createreact应用程序生成),运行在端口3000上,我使用npmstart运行该端口

其文件结构如下:

当我要部署它时,无论是在Heroku还是AWS上,它都需要是一个包含前端和后端项目的整合项目,对吗?我看到的项目布局基本上是React app+1后端文件,如下所示:

  • 要将我的两个应用程序(React App和Express API)部署为一个网站,我是否需要将它们作为一个项目
  • 如果1为“是”,那么如果create react应用程序和express generator最终不会为fullstack应用程序留下文件结构,为什么人们会使用它
  • 是否有任何指南说明如何组合使用express generator和create react应用程序创建的两个应用程序(从文件结构的字面意义上讲,因为这两个应用程序已经可以很好地通信)
  • 如果需要合并它们,这对我的package.json意味着什么
  • 现在,在我的backend package.json中,我有以下脚本:

    "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
    文件夹位于同一服务器上。