代码组织:节点服务器和具有共享类型的反应项目
Posted
技术标签:
【中文标题】代码组织:节点服务器和具有共享类型的反应项目【英文标题】:Code organization: Node server and react project with shared types 【发布时间】:2021-02-09 07:19:29 【问题描述】:问题
我有
-
一个简单的 React 客户端,并且
为客户端页面提供服务并充当客户端 API 的节点服务器。
它们是紧密耦合、独立的 TypeScript 项目,是一个更大的 git
存储库的一部分。服务器永远不会被“部署”到任何地方,它只会在本地网络上运行。
我想保留一组定义 API 的共享类型。类似于RESTyped 定义它们的方式:
interface MyAPIDefinition
"/user/":
"GET":
params: id: number
response: ...
...
"/image/:id":
...
注意:其中一些类型可能依赖于@types/node
,例如Buffer
.
最好的方法是什么?
研究至今
This *** answer 建议将所有内容合并到一个项目中,服务器位于根目录,客户端作为子文件夹。我看到的缺点是:
让react-scripts build|run
处理子文件夹的复杂性
(更重要的是 IMO)服务器和客户端正在共享他们的node_modules
This answer 建议使用 yarn 工作区。在我的情况下,我想我会使用 npm workspaces,但这似乎是我不想乱用的尖端工具,因为它可能会在我的团队中引起混乱。
This one 表示要抛弃基于目录的工作流程的简单性,并将您的 shared
代码/类型打包到私有托管的 npm 模块中。这似乎是一个巨大的痛苦,因为 a) 服务器和客户端是单个 repo 的一部分,所以共享代码也应该在那里,并且 b) 我必须重新发布包并在需要时重新更新两个模块中的依赖项做出改变。向我的合作者解释这也是一个复杂的工作流程。
This question 没有得到答复,但有一些来自 OP 的更新。他们最终编写了一个脚本来监视共享目录中的文件并自动将它们复制到其他项目。这让合作者感到很奇怪和困惑。
【问题讨论】:
3 是官方答案,将用于此应用程序之外的共享。 2 是 3 开销的解决方案(来自lerna)。 1 我会避免。 4 看起来像 link 有额外的步骤。 【参考方案1】:据我了解,您已经使用了某种包含项目的 monorepo 用于您的后端和前端。
rush 或 nx 等工具可让您自动化 monorepo 项目的相互依赖/发布/构建...
后端和前端项目可能依赖于一个新的共享“接口”项目,monorepo 工具将连接所有内容并处理依赖冲突等。
【讨论】:
感谢您的回复。有什么理由我不应该在服务器/客户端中只使用npm install ../shared
?根据this 的回答。以上是关于代码组织:节点服务器和具有共享类型的反应项目的主要内容,如果未能解决你的问题,请参考以下文章