Yarn 工作区是使用共享库时的最佳做法



我有一个常见的(或不那么coomon)的yarn workspaces场景,但在网上没有找到适合我的指南。

纱线工作区如下所示:

- monorepo
- packages
- client
- admin
- theme
- lib 
  1. 客户被用作我们的最终用户,它是一个反应项目
  2. 管理员
  3. 用作管理员用户的后台,它也内置在反应中
  4. 主题用于所有UI工具包(组件)和故事书。我们在clientadmin中使用UI套件 项目,这是经典的"monorepo 风格"(lerna),用于在 2 个项目之间共享组件。此文件夹应仅为此项目共享。
  5. Lib用于所有 API 和多个项目之间的共享"业务逻辑"。我有 4 个项目,它们对 API 请求、身份验证、Redux 等使用相同的库功能。

附加信息:

  • monorepo是具有.gitmodules的根存储库
  • 每个子文件夹都是不同的 git 存储库
  • 我们使用工作区是为了在themeclient上轻松开发,同时admin项目。

问题:

我们仅在client项目和admin项目中运行yarn start。这两个项目使用相同的theme和相同的lib功能。由于lib与其他项目共享,因此每周更新一次:

  1. 我如何防止它从一个项目更新到另一个项目? 我应该在 git 存储库中使用tags,还是应该从 monorepo worksapce 中删除libnpm package使用它(重点是当我们更改lib文件时,我们有简单的开发过程,我们不需要一次又一次地npm update它。
  2. 如果lib将是 npm 包,我如何告诉 monorepo 在运行yarn start时使用工作区并在运行yarn build时使用 npm 版本?

请就此方案的最佳做法提供建议。

提前感谢, 狮子座。

最终答案:我找到了最适合我的解决方案,并在开发过程中尝试了 6 周(最佳实践)。

我最终得到了这个结构:

  • monorepo//git 主存储库
      • 客户端//git 子存储库
      • 管理员//git 子存储库
      • 主题//git 子存储库
      • lib//git 子存储库

clientadmintheme用作yarn workspaceshttps://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 包。

最新更新