我有一个常见的(或不那么coomon)的yarn workspaces
场景,但在网上没有找到适合我的指南。
纱线工作区如下所示:
- monorepo
- packages
- client
- admin
- theme
- lib
- 客户被用作我们的最终用户,它是一个反应项目 管理员
- 用作管理员用户的后台,它也内置在反应中
- 主题用于所有UI工具包(组件)和故事书。我们在
client
和admin
中使用UI套件 项目,这是经典的"monorepo 风格"(lerna),用于在 2 个项目之间共享组件。此文件夹应仅为此项目共享。 - Lib用于所有 API 和多个项目之间的共享"业务逻辑"。我有 4 个项目,它们对 API 请求、身份验证、Redux 等使用相同的库功能。
附加信息:
monorepo
是具有.gitmodules
的根存储库- 每个子文件夹都是不同的 git 存储库
- 我们使用工作区是为了在
theme
和client
上轻松开发,同时admin
项目。
问题:
我们仅在client
项目和admin
项目中运行yarn start
。这两个项目使用相同的theme
和相同的lib
功能。由于lib
与其他项目共享,因此每周更新一次:
- 我如何防止它从一个项目更新到另一个项目? 我应该在 git 存储库中使用
tags
,还是应该从 monorepo worksapce 中删除lib
并npm package
使用它(重点是当我们更改lib
文件时,我们有简单的开发过程,我们不需要一次又一次地npm update
它。 - 如果
lib
将是 npm 包,我如何告诉 monorepo 在运行yarn start
时使用工作区并在运行yarn build
时使用 npm 版本?
请就此方案的最佳做法提供建议。
提前感谢, 狮子座。
最终答案:我找到了最适合我的解决方案,并在开发过程中尝试了 6 周(最佳实践)。
我最终得到了这个结构:
- monorepo//git 主存储库
- 包
- 客户端//git 子存储库
- 管理员//git 子存储库
- 主题//git 子存储库
- lib//git 子存储库
- 包
client
和admin
将theme
用作yarn workspaces
https://classic.yarnpkg.com/en/docs/workspaces/
lib
用作带有git+ssh://git@gitlab.com:xxxx/xxx/lib.git#v1.0.1
的 Git npm 包
主/子存储库结构使我能够单独管理每个项目的版本控制,同时按版本使用共享的"主题"(工作区)和"库"核心(npm)。
提示:为了便于开发,我建议将lib
添加为yarn workspace
,因为当我们运行时yarn start
它会实时热重载更改。当我们执行yarn build
时,我们将 lib 用作带有 ssh 链接的 npm 包。
祝你好运! 狮子座。
这是我的个人喜好。
- monorepo
- packages
- client
- admin
- core
我认为 lib 可以移动到核心,主题对我来说更像是 npm 包。