使用共享库时 Yarn 工作区的最佳实践
Posted
技术标签:
【中文标题】使用共享库时 Yarn 工作区的最佳实践【英文标题】:Yarn workspaces best practice when using shared library 【发布时间】:2020-07-21 23:24:43 【问题描述】:我对@987654323@ 有一个常见(或不太常见)的场景,但在网上找不到适合我的指南。
yarn 工作区看起来像这样:
- monorepo
- packages
- client
- admin
- theme
- lib
-
Client 用作我们的最终用户,它是一个 React 项目
Admin 用作管理员用户的后台,它也内置在 react 中
主题 用于所有 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 工作空间中删除 lib
并将其作为 npm package
使用(重点是在我们更改 lib
文件时有简单的开发过程不需要一遍又一遍地npm update
。
如果lib
将是npm 包,我如何告诉monorepo 在我运行yarn start
时使用工作区并在我运行yarn build
时使用npm 版本?
请就这种情况的最佳做法提出建议。
提前致谢, 狮子座。
【问题讨论】:
您是否引用了此链接:smashingmagazine.com/2019/07/… toptal.com/front-end/guide-to-monorepos 如果没有,请参考那些他们有很好建议的链接 【参考方案1】:这是我的个人喜好。
- monorepo
- packages
- client
- admin
- core
我认为 lib 可以移动到核心,并且主题对我来说更像是 npm 包。
【讨论】:
您的意思是 Theme 和 Lib 应该是核心存储库中的 npm 包吗? “主题”仅与该项目相关,“库”与许多项目相关...【参考方案2】:最终答案: 我找到了对我来说的最佳解决方案,并在开发过程中尝试了 6 周(最佳实践)。
我最终得到了这个结构:
monorepo // git MAIN 存储库 包 客户端 // git 子仓库 admin // 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 包
主/子存储库结构使我能够分别管理每个项目的版本控制,同时按版本使用共享的“主题”(工作区)和“lib”核心(npm)。
提示:
为了便于开发,我建议将lib
添加为yarn workspace
,因为当我们运行yarn start
时,它会实时热重载更改。当我们执行yarn build
时,我们将 lib 用作带有 ssh 链接的 npm 包。
祝你好运! 狮子座。
【讨论】:
我怀疑 git submodule 通常是一个很好的解决方案。我认为这会使工作流程变得繁琐,并且可能会使 monorepo 本身的一些好处失效。以上是关于使用共享库时 Yarn 工作区的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章