使用共享库时 Yarn 工作区最佳实践
Yarn workspaces best practice when using shared library
我对 yarn workspaces
有一个常见的(或不太常见的)场景,但没有在网上找到适合我的指南。
yarn 工作区看起来像这样:
- monorepo
- packages
- client
- admin
- theme
- lib
- 客户端作为我们的最终用户,它是一个反应项目
- Admin 用作管理员用户的后台,它也是在 React 中构建的
- 主题 用于所有 UI 套件(组件)和故事书。我们在
client
和 admin
中使用 UI 套件
项目,这是经典的 "monorepo style" (lerna) 在 2 个项目之间共享组件。此文件夹应仅为此项目共享。
- Lib 用于所有 API 并在多个项目之间共享 "Business logic"。我有 4 个项目,它们对 API 请求、身份验证、Redux 等使用相同的库功能。
附加信息:
monorepo
是 .gitmodules
的根存储库
- 每个子文件夹都是一个不同的 git 存储库
- 我们使用工作区是为了在
theme
以及 client
和 admin
项目上同时进行轻松开发。
问题:
我们运行yarn start
只在client
项目和admin
项目。这两个项目都使用相同的 theme
和相同的 lib
功能。由于 lib
与其他项目共享,因此每周更新一次:
- 如何防止它从一个项目更新到另一个项目?我应该在 git 存储库中使用
tags
还是应该从 monorepo worksapce 中删除 lib
并将其作为 npm package
使用(重点是简化开发过程当我们更改 lib
文件时,我们不需要一次又一次地 npm update
它。
- 如果
lib
将是 npm 包,我如何告诉 monorepo 在我 运行 yarn start
时使用工作区并在我 运行 [时使用 npm 版本=32=]?
请就此场景的最佳做法提出建议。
提前致谢,
狮子座
这是我的个人喜好。
- monorepo
- packages
- client
- admin
- core
我认为lib可以移到核心,主题对我来说更像是npm包。
最终答案:
我找到了对我来说 的最佳解决方案,并且我在开发过程中尝试了 6 周(最佳实践)。
我最终得到了这个结构:
- monorepo // git 主存储库
- 包
- 客户端 // git 子存储库
- admin // git 子存储库
- 主题 // git 子存储库
- lib // git 子存储库
client
和admin
使用theme
作为yarn workspaces
https://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 包
祝你好运!
狮子座
我对 yarn workspaces
有一个常见的(或不太常见的)场景,但没有在网上找到适合我的指南。
yarn 工作区看起来像这样:
- monorepo
- packages
- client
- admin
- theme
- lib
- 客户端作为我们的最终用户,它是一个反应项目
- Admin 用作管理员用户的后台,它也是在 React 中构建的
- 主题 用于所有 UI 套件(组件)和故事书。我们在
client
和admin
中使用 UI 套件 项目,这是经典的 "monorepo style" (lerna) 在 2 个项目之间共享组件。此文件夹应仅为此项目共享。 - Lib 用于所有 API 并在多个项目之间共享 "Business logic"。我有 4 个项目,它们对 API 请求、身份验证、Redux 等使用相同的库功能。
附加信息:
monorepo
是.gitmodules
的根存储库
- 每个子文件夹都是一个不同的 git 存储库
- 我们使用工作区是为了在
theme
以及client
和admin
项目上同时进行轻松开发。
问题:
我们运行yarn start
只在client
项目和admin
项目。这两个项目都使用相同的 theme
和相同的 lib
功能。由于 lib
与其他项目共享,因此每周更新一次:
- 如何防止它从一个项目更新到另一个项目?我应该在 git 存储库中使用
tags
还是应该从 monorepo worksapce 中删除lib
并将其作为npm package
使用(重点是简化开发过程当我们更改lib
文件时,我们不需要一次又一次地npm update
它。 - 如果
lib
将是 npm 包,我如何告诉 monorepo 在我 运行yarn start
时使用工作区并在我 运行 [时使用 npm 版本=32=]?
请就此场景的最佳做法提出建议。
提前致谢, 狮子座
这是我的个人喜好。
- monorepo
- packages
- client
- admin
- core
我认为lib可以移到核心,主题对我来说更像是npm包。
最终答案: 我找到了对我来说 的最佳解决方案,并且我在开发过程中尝试了 6 周(最佳实践)。
我最终得到了这个结构:
- monorepo // git 主存储库
- 包
- 客户端 // git 子存储库
- admin // git 子存储库
- 主题 // git 子存储库
- lib // git 子存储库
- 包
client
和admin
使用theme
作为yarn workspaces
https://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.
祝你好运! 狮子座