将nodejs服务器和react前端保留在同一目录中是一个好习惯吗?

how*_*itz 2 node.js docker reactjs docker-compose

我需要使用 Nodejs 服务器来提供我的 React 构建文件(构建目录)。由于 React 被包装在 Docker 中,我的 Nodejs 服务器无法访问 /frontend 中的构建目录。所以我正在考虑将我的文件转移server.js/frontend并为它们创建一个 Dockerfile。它会有这样的东西CMD ['npm run build', 'node server.js']

这会是非法和不良做法吗?

JRi*_*dsz 6

要构建网络,您有以下选择:

古代巨石

这是实现网络的第一种方法。一切都在服务器中:前端和后端。Frontend(html) 在服务器中动态创建,并根据每个请求发送到浏览器。

在此类应用中:

这里是一些语言及其框架

  • java:jsp、jsf、thymeleaf、zk 等
  • nodejs : ejs、车把
  • C#:剃刀
  • php:wordpress、drupal 等
  • ruby:几乎所有框架
  • python:django、flask等

不是你的情况,但我看到这样的流程:

  • git 存储库中名为 frontend 的文件夹,其中包含 React、Angular、Vue 等
  • 执行此文件夹的构建:npm run build。通常由人类执行此操作。
  • 将构建结果(index.html、js、css 等)复制到同一 git 存储库中另一个名为 server 的文件夹

现代巨石

  • 与之前解释的选项类似,但自动化
  • 使用现代 CSR 框架,例如:react、Angular 和 Vue
  • 大量现成可用的功能,例如:登录

https://lzomedia.com/blog/ different-ways-to-connect-react-frontend-and-node-backend/

如图所示,前端和后端部署在同一台服务器上,同一端口。

如果您正在开发带有后端的单个站点,则可以将前端和后端放在同一存储库或目录中。它将像现代的庞然大物一样:mean、mern、mevn,但存在一些与在一个存储库中拥有不同应用程序类型这一事实相关的挑战。

具有多个 api/微服务的 CSR/SPA

在此输入图像描述

适合如果:

  • 公司有几十个领域,每个领域都有复杂的需求,仅靠一个Web应用程序无法解决整个公司的问题
  • 需要网络版和原生移动版具有几乎相同的功能
  • 需要系统之间的集成(请求驱动和事件驱动)
  • 解耦的现代身份验证(例如IAM)或可通过oauth2解决的授权流程

如果这是您的情况,我建议您采用分布式或解耦架构。我的意思是存储库/服务器的一个应用程序或进程。这里有一些优点:

  • 前端(spa)与反应
    • 自己的域名,例如 acme.com
    • 您可以使用静态网站的专门服务
    • 您不仅限于一个 api。您可以使用多个 api。
    • React 开发者可以有自己的 git 策略
    • 为网络定制构建
  • 后端(api)与nodejs
    • 自己的域名,例如 acme.api.com
    • 您可以仅扩展后端,因为繁重的进程位于这一层
    • Nodejs 开发人员可以有自己的 git 策略

服务水疗中心

如果您的网络很简单,您可以使用

但是,如果您的网络具有后端等复杂性:环境变量可移植性、一次构建等,您可以使用:

参考