【发布时间】:2020-04-21 14:39:36
【问题描述】:
我真的很喜欢 here 在处理 React 前端和一些带有 express 的后端时看到的文件夹结构:
root
├── backend
| ├── node_modules
| ├── public
| ├── src
│ │ └── Server.ts
| ├── package.json
| └── tsconfig.json
├── frontend (created using create-react-app)
| ├── node_modules
| ├── public
| ├── src
│ │ └── Index.js
| ├── package.json
| └── tsconfig.json
我认为将单独的包与单独的 node_modules 分开是合理的,因为前端和后端基本上是完全不同的东西,例如。 G。他们需要不同的节点模块。此外,这种模块化方法在视觉上对我很有吸引力,并且存储库看起来很整洁。
但是,当我需要在前端和后端之间共享内容时,我遇到了这种结构的问题。我在项目根目录下添加了一个shared 文件夹,其中包含自己的项目以及自己的tsconfig.json、package.json 等。这种方法是here 和here 方法的混合。对于后端,这完全没问题:正确设置了tsconfig.json(使用TypeScript Project References 和aliased imports),我可以像这样引用文件root/shared/src/myFile.ts:
import { myFunction } from @shared/myFile;
我使用 create-react-app 创建了 React 前端。别名导入不起作用对我来说没关系,所以我必须使用(在前端的 src 文件夹内):
import { myFunction } from '../../shared/src/myFile';
可悲的是,这些从 src 目录 are not supported 外部由 create-react-app 导入,我不想使用 eject,因为我没有使用 webpack 的经验并且不想要自己维护所有配置文件(这就是我首先使用create-react-app 的原因)。
我知道我可以将共享内容移动到前端的src 目录。但这意味着,我必须添加使用Project References in TypeScript 所需的标签,例如。 G。在前端的tsconfig.json 中将composite 设置为true,这对我来说似乎很奇怪,感觉更像是一个黑客。我想要一个单独的 npm 项目来包含我的共享内容。
由于create-react-app 本身并不支持从src 目录之外的导入,我想我可能搞错了大局。我现在使用的文件夹结构不是如何设置带有后端的 React 项目的有效方法吗? create-react-app 提供什么机制来链接前端和后端之间的文件?我还可以考虑拥有一个带有src 文件夹的根项目,其中有两个文件夹backend 和frontend。但这意味着,我们将在根目录中拥有一个共享的 node_modules 文件夹。
这是我使用 React 的第一个项目,我很想了解一些此类架构问题的最佳实践。一些指向可靠资源的链接,其中解释了全栈 React 开发的项目结构,这将非常有帮助。谢谢????
【问题讨论】:
-
作为一个花了 650 多小时维护我们产品的同构部分的人; (SSR、共享代码、实用程序等)我现在可以告诉你最好的方法是放弃 CRA 并为你的服务器转换为 next.js + typescript + 内置 /pages/api。您的前端和后端将融合为一个可维护性提高 100 倍的项目
标签: javascript node.js reactjs typescript create-react-app