问题
我有
- 一个直接反应的客户端,以及
- 为客户端页面提供服务并充当客户端的API的节点服务器
它们是紧密耦合的、独立的TypeScript项目,是一个更大的git
repo的一部分。服务器将永远不会是";"部署";在任何地方,它都会在本地网络上运行。
我想保留一组定义API的共享类型。类似于RESTyped如何定义它们:
interface MyAPIDefinition {
"/user/": {
"GET": {
params: { id: number }
response: { ... }
}
...
}
"/image/:id": {
...
}
注意:其中一些类型可能依赖于@types/node
,例如Buffer
。
实现这一目标的最佳方法是什么?
迄今为止的研究
这个stackerflow答案建议将所有内容合并到一个项目中,将服务器作为根目录,将客户端作为子文件夹。我看到的缺点是:
- 让
react-scripts build|run
处理子文件夹的复杂性 - (更重要的是IMO(服务器和客户端正在共享他们的
node_modules
- 让
这个答案建议使用纱线工作空间。在我的情况下,我想我会使用npm工作区,但这似乎是一种前沿工具,我宁愿不去惹它,因为它可能会在我的团队中引起混乱。
这一条建议放弃基于目录的工作流的简单性,将
shared
代码/类型打包到一个私人托管的npm模块中。这似乎是一个巨大的痛苦,因为a(服务器和客户端是单个repo的一部分,所以共享代码也应该存在于其中,b(每当我想进行更改时,我都必须重新发布包并重新更新两个模块中的依赖项。这也将是一个复杂的工作流程来向我的合作者解释。这个问题没有得到回答,但OP进行了一些更新。他们最终编写了一个脚本,监视共享目录中的文件,并自动将其复制到其他项目中。这让合作者感到愤怒和困惑。
据我所知,您已经在后台和前台使用了某种包含monoreto的项目。
rush或nx等工具允许您自动实现单回购项目的相互依赖性/发布/构建。。。
后台和前台项目可能依赖于一个新的共享";接口";项目和monorepo工具将连接所有内容,并处理依赖关系碰撞等。