使用共享库时纱线工作区的最佳做法

时间:2020-04-09 10:54:22

标签: lerna monorepo yarn-workspaces

对于yarn workspaces,我有一个常见的情况(或不太熟悉),并且没有在线找到适合我的指南。

纱线工作区如下:

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

其他信息:

  • monorepo是带有.gitmodules的根存储库
  • 每个子文件夹都是一个不同的git存储库
  • 我们使用工作区,以便同时在themeclientadmin项目上进行轻松开发。

问题:

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

  1. 如何防止项目间的更新?我应该在git储存库中使用tags还是应该从monorepo工作区中删除lib并以npm package的身份使用它(整个要点是,当我们更改lib个文件,我们不需要一次又一次npm update
  2. 如果lib将是npm软件包,如何在运行yarn start时告诉monorepo使用工作区,并在运行yarn build时如何使用npm版本?

请针对这种情况的最佳做法提供建议。

预先感谢, 狮子座。

2 个答案:

答案 0 :(得分:0)

这是我的个人喜好。

- monorepo
   - packages
     - client
     - admin
     - core

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

答案 1 :(得分:-1)

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

我最终得到了这样的结构:

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

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

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

主/子存储库结构使我能够分别管理每个项目的版本控制,并同时使用各个版本的共享“主题”(工作区)和“ lib”核心(npm)。

提示: 为了便于开发,我建议将lib添加为yarn workspace,因为当我们运行yarn start时,它将实时重新加载更改。当我们执行yarn build时,我们使用带有ssh链接的lib作为npm软件包。

祝你好运! 狮子座。