reactjs - 我在 CRA 和后端之间共享 Typescript 代码的方法:我错过了什么吗?
问题描述
我有一个具有以下目录结构的存储库。下面描述的代码可以在这里找到
/my project/
api/
src/
tsconfig.json
client/
src/
tsconfig.json
shared/
engine/
classes/
types/
因为我希望engine
前端和后端都可以重用代码,所以我决定将它放在一个单独的shared
目录中。为了让一切正常,我做了以下更改:
API
@engine
为 tsconfig.json 路径添加了别名,如下所示:
"paths": {
"@engine/*": ["../shared/engine/*"],
},
- 更新了 package.json 启动脚本以解决别名和文件监视,如下所示:
ts-node-dev -r tsconfig-paths/register --respawn --pretty --transpile-only --watch ../shared/engine src/server.ts
通过这些更改,我可以在我的 API 代码中使用 导入引擎类@engine
,并且还可以实时监视共享代码的文件。
客户
- 我曾经
react-app-rewired
覆盖配置限制并tsconfig.json
使用上述别名(通过基本文件)更新,以便我可以将 @engine 注释用于我的引擎导入。此处描述了此方法。 - 为了在我的共享代码上启用文件监视,我在 tsconfig.json 文件中添加了以下内容:
"rootDirs": [
"./src",
"../shared/engine"
],
通过这些更改,前端导入也按预期工作。
我遇到的针对此类问题的许多解决方案(此处,此处)似乎基于 monorepo 架构模式和工具,例如项目引用、纱线工作区、lerna 等。这些解决方案似乎也将shared
目录视为单独的在依赖项目中构建和使用的项目。
我的方法没有做任何事情,但从表面上看,它似乎在做我想做的事情(即:别名导入、代码更改时自动重新加载,以及在各自的构建文件夹中包含共享代码(用于部署) )。
我的问题是,我是否错过了这种方法?什么样的场景需要我考虑基于项目引用、纱线工作区等的实际 monorepo 架构?与目前的方法相比,我将获得哪些优势?
解决方案
推荐阅读
- html - 我可以更改 Chrome 中 HTML 颜色输入的默认输入格式吗?
- javascript - 当我加载我的页面时,IonImg 显示为损坏的图像
- flutter - Flutter setState() 正在执行但小部件未重新渲染
- satellite - 从瞬时开普勒元素生成 TLE(双线元素)文件是否合法?
- kotlin - 当我导航到另一个片段时如何添加参数?
- oauth - 具有 OAuth 身份验证和模拟的 Office 365 EWS 应用程序 - 错误 401
- python - 总是执行 else 语句
- javascript - 如何防止可拖动的 div 离开其父标签
- python - 从 pandas 绘图使日期粘在一起
- c# - Audit.NET - 实体框架 - 如何实现 OptOut