使用共享库时 Yarn 工作区最佳实践

Yarn workspaces best practice when using shared library

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

yarn 工作区看起来像这样:

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

附加信息:

问题:

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

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

请就此场景的最佳做法提出建议。

提前致谢, 狮子座

这是我的个人喜好。

- monorepo
   - packages
     - client
     - admin
     - core

我认为lib可以移到核心,主题对我来说更像是npm包。

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

我最终得到了这个结构:

  • monorepo // git 主存储库
      • 客户端 // git 子存储库
      • admin // git 子存储库
      • 主题 // git 子存储库
      • lib // git 子存储库

clientadmin使用theme作为yarn workspaceshttps://classic.yarnpkg.com/en/docs/workspaces/

lib 用作 Git npm 包 git+ssh://git@gitlab.com:xxxx/xxx/lib.git#v1.0.1

main/sub 存储库结构使我能够分别管理每个项目的版本控制,同时使用共享 "theme"(工作区)和 "lib" 核心(npm ) 按版本分类。

提示: 为了便于开发,我建议将 lib 添加为 yarn workspace,因为当我们 运行 yarn start 时,它会实时热重新加载更改。当我们做 yarn build 时,我们使用 lib 作为带有 ssh link.

的 npm 包

祝你好运! 狮子座