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

2024-02-23

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

纱线工作区看起来像这样:

 - monorepo
   - packages
     - client
     - admin
     - theme
     - lib 
  1. Client用作我们的最终用户,它是一个react项目
  2. Admin用作管理员用户的后台,它也是在 React 中构建的
  3. Theme用于所有 UI 套件(组件)和故事书。我们使用 UI 套件client and admin项目,这是经典的“monorepo 风格”(lerna),用于在两个项目之间共享组件。该文件夹应仅为该项目共享。
  4. Lib用于多个项目之间的所有 API 和共享“业务逻辑”。我有 4 个项目,它们使用相同的库功能来处理 API 请求、身份验证、Redux 等。

附加信息:

  • monorepo是根存储库.gitmodules
  • 每个子文件夹都是一个不同的git存储库
  • 我们使用工作区是为了轻松开发theme并在client and admin项目同时进行。

问题:

We run yarn start只有在client项目和admin项目。两个项目都使用相同的theme和一样lib功能。因为lib与其他项目共享,每周更新一次:

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

请提供有关此场景的最佳实践的建议。

提前致谢, 利奥.


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

我最终得到了这个结构:

  • monorepo // git MAIN repository
    • packages
      • client // git 子存储库
      • admin // git 子存储库
      • 主题 // git 子存储库
      • lib // git 子存储库

The client and admin使用theme as yarn workspaces https://classic.yarnpkg.com/en/docs/workspaces/ https://classic.yarnpkg.com/en/docs/workspaces/

lib用作 Git npm 包git+ssh://[email protected] /cdn-cgi/l/email-protection:xxxx/xxx/lib.git#v1.0.1

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

Tip:为了方便开发,我建议添加lib as yarn workspace因为当我们跑步时yarn start它实时热重载更改。当我们这样做时yarn build我们使用 lib 作为带有 ssh 链接的 npm 包。

祝你好运! 利奥.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用共享库时的 Yarn 工作区最佳实践 的相关文章

随机推荐

  • 如果安装了 .Net 4.5,如何保持 .Net 4.0 行为?

    我们有一个面向 Net Framework 4 0 的 Windows 窗体应用程序 安装 Net Framework 4 5 后 应用程序开始崩溃 我们必须调查崩溃事件 并且很可能必须修复我们这边的问题 但是 在我们准备好使用 Net 4
  • 如何栅格化球体

    所以 我试图创建一个外部有 块 的球体 有点像在 Minecraft 中构建的 我不知道圆的外部的术语是什么 问题是 我不知道如何让像中点圆算法这样的方程适用于球体 最好是在 lua 或 java 中 这样我可以更轻松地阅读任何答案 我不想
  • @with_kw 在 Julia 中做什么?

    我正在阅读一些代码 如下所示 with kw struct HyperParams batch size Int 128 latent dim Int 100 epochs Int 25 verbose freq Int 1000 outp
  • TypeError:在 Xubuntu 14.04.5 上尝试 Selenium 时,urlopen() 获得了关键字参数“body”的多个值

    环境 lsb release a No LSB modules are available Distributor ID Ubuntu Description Ubuntu 14 04 5 LTS Release 14 04 Codenam
  • java中可以将字符串转换为数学运算吗?

    我可以将像 3 3 3 这样的字符串转换为java中的数学运算吗 使用 JavaScript 来评估它脚本引擎 http docs oracle com javase 6 docs api javax script ScriptEngine
  • AWS Lex Python Codehook 参考

    我对 Python 和编码 还很陌生 但我正在尝试使用 Lambda 函数构建自己的 Lex 机器人 我一直在关注教程 我可以理解它是如何工作的 问题是 当我尝试为 Lex 编写自己的 Lambda 函数时 我找不到任何参考来帮助我编写代码
  • 将带逗号的字符串转换为数组

    如何将字符串转换为 JavaScript 数组 看代码 var string 0 1 var array string alert array 0 在这种情况下alert shows 0 1 如果它是一个数组 它会显示0 而如果alert
  • 使用 .net SDK 从 Amazon S3 存储桶下载文件夹

    如何使用 net sdk 下载 s3 存储桶中存在的整个文件夹 尝试使用以下代码 它会抛出无效密钥 我需要下载存储桶中存在的嵌套 pesudo 文件夹中存在的所有文件 并将文件下载限制删除为默认值 1000 public static vo
  • 如何在Retrofit-2.0+ android中设置超时

    我提到这个链接 https stackoverflow com a 29380845 1083093但我似乎无法实现我的 我在用 compile com squareup retrofit2 retrofit 2 0 2 compile c
  • 将 Drupal 用户帐户导入 Rails,无需用户更改密码

    我想将一系列 Drupal 用户帐户导入到new铁轨项目 我正在使用 Devise 在 Rails 中进行用户身份验证 我希望能够将加密密码从 Drupal 导入到 Rails 中 以便用户在网站迁移时获得无缝体验 关于如何做到这一点有什么
  • 为什么 git revert 在这些情况下表现不同?

    假设我有ProjectA and ProjectB其中我只有一个名为test txt在这两个项目中并使用 git 跟踪它 第一次提交后 两个项目中的文件内容如下所示 one two three four 第二次提交后 两个项目中的文件内容如
  • dompdf:A4页面上的白边距

    我正在使用 dompdf 一个 PHP 库 创建 PDF 页面 但在设置正确的尺寸时遇到问题 当我使用 CSS 属性时 page size 21cm 29 7cm 例如 我想要页面的上半部分为红色 PDF 文件没问题 但打印后我得到了白色边
  • 如果我更改操作系统时区,事件(作为 json feed)、开始结束参数 unix 时间戳会有所不同

    我正在使用 fullcalendar 插件 如果有人可以帮助我 我将不胜感激 我通过 PHP URL 获取 json 事件 像这样的东西 calendar fullCalendar events myfeed php 因此 在返回事件的 p
  • Springboard 无法启动应用程序,错误为 3、0、4 等

    为什么 Xcode 无法在模拟器中启动应用程序 我在网上浏览了很多解决方案 但有时有效 有时无效 很多时候我解决问题的方法就是退出模拟器 删除应用程序 重置模拟器的内容设置 并清理和构建 但为什么我每次都要尝试其中的任何一个 所有 呢 Xc
  • 从命令行启动 Beyond Compare

    我已安装 Beyond Compare 3 C Program Files Beyond Compare 3 BCompare exe 和西格温 C Cygwin bin bash exe 我想要的是能够使用诸如以下的命令 diff
  • 核心图形和 GIF 颜色表

    我试图限制动画 GIF 的颜色数量 由一系列CGImageRef 但是 我在实际设置自定义颜色表时遇到困难 有谁知道如何使用核心显卡来做到这一点 我知道kCGImagePropertyGIFImageColorMap 下面是一些测试代码 大
  • 如何使用 $util.error 在 AppSync 中发送自定义错误

    我对 AppSync 错误处理有疑问 我想发送errorInfo对象以及错误响应 我尝试过 util error 根据文件 https docs aws amazon com appsync latest devguide resolver
  • 如何更改 Rails 中的 URL

    我有一个名为 Book 的资源 然后我有如下域 domain com books 272 但我想把它改成 domain com stories 272 仅针对 URL 不需要更改控制器 类等 在我有的路线中 map connect cont
  • 如何在JSP页面中包含angular2/4组件?

    我想在JSP页面中添加角度组件 有哪些可能的方法 描述更多 我在 JSP 中有一个应用程序动态 Web 应用程序 我创建的另一个应用程序是一个执行一些身份验证的角度组件 除了 object embedd 或 iframe 之外 还有其他方法
  • 使用共享库时的 Yarn 工作区最佳实践

    我有一个常见 或不太常见 的场景yarn workspaces并且在网上没有找到适合我的指南 纱线工作区看起来像这样 monorepo packages client admin theme lib Client用作我们的最终用户 它是一个