代码组织:节点服务器和具有共享类型的react项目



问题

我有

  1. 一个直接反应的客户端,以及
  2. 为客户端页面提供服务并充当客户端的API的节点服务器

它们是紧密耦合的、独立的TypeScript项目,是一个更大的git repo的一部分。服务器将永远不会是";"部署";在任何地方,它都会在本地网络上运行。

我想保留一组定义API的共享类型。类似于RESTyped如何定义它们:

interface MyAPIDefinition {
  "/user/": {
    "GET": {
      params: { id: number }
      response: { ... }
    }
    ...
  }
  "/image/:id": {
  ...
}

注意:其中一些类型可能依赖于@types/node,例如Buffer

实现这一目标的最佳方法是什么?

迄今为止的研究

  1. 这个stackerflow答案建议将所有内容合并到一个项目中,将服务器作为根目录,将客户端作为子文件夹。我看到的缺点是:

    • react-scripts build|run处理子文件夹的复杂性
    • (更重要的是IMO(服务器和客户端正在共享他们的node_modules
  2. 这个答案建议使用纱线工作空间。在我的情况下,我想我会使用npm工作区,但这似乎是一种前沿工具,我宁愿不去惹它,因为它可能会在我的团队中引起混乱。

  3. 这一条建议放弃基于目录的工作流的简单性,将shared代码/类型打包到一个私人托管的npm模块中。这似乎是一个巨大的痛苦,因为a(服务器和客户端是单个repo的一部分,所以共享代码也应该存在于其中,b(每当我想进行更改时,我都必须重新发布包并重新更新两个模块中的依赖项。这也将是一个复杂的工作流程来向我的合作者解释。

  4. 这个问题没有得到回答,但OP进行了一些更新。他们最终编写了一个脚本,监视共享目录中的文件,并自动将其复制到其他项目中。这让合作者感到愤怒和困惑。

据我所知,您已经在后台和前台使用了某种包含monoreto的项目。

rush或nx等工具允许您自动实现单回购项目的相互依赖性/发布/构建。。。

后台和前台项目可能依赖于一个新的共享";接口";项目和monorepo工具将连接所有内容,并处理依赖关系碰撞等。

最新更新