【问题标题】:How do I update all subfolder package.json in a monorepo to the same version?如何将 monorepo 中的所有子文件夹 package.json 更新为相同版本?
【发布时间】:2021-09-04 14:47:23
【问题描述】:

我有一个包含一堆不同前端 React 项目的存储库,它们都有自己的 package.json 文件。

我有四个要求:

  1. 我希望将所有这些项目保持在同一个依赖关系轨道上。 (即,我希望我的所有项目都使用每个 npm 包的相同版本)
  2. 我希望能够使用一个“全局”命令将每个 package.json 更新到最新版本。
  3. 理想情况下,我希望使用某种经过验证的开源工具,例如 Yarn Workspaces 或 Lerna,而不是使用全局 package.json 文件自行管理。
  4. 我正在使用 Yarn 生态系统。

这些包不需要同时运行。并非每个项目都包含完全相同的依赖项,但都至少包含一些常见的依赖项(即 React、Webpack、Babel 等)。这些包也是完全私有的,不应该在 npm 上发布,只能在 GitHub 上发布。

我对工具进行了一些研究,但我很困惑是否仅使用 Yarn Workspaces 是解决方案,或者是否需要 Lerna。以下是我迄今为止在 Yarn Workspaces 中所做的工作:

文件夹结构:

Repo-root
   Packages
      Project-1
      Project-2

回购根包.json:

{
   "private": true,
   "name": "example-monorepo",
   "workspaces": ["packages/*"],
   "scripts": {}
}

我了解 Yarn Workspaces 试图将所有常见的依赖项移动到幕后的根节点模块,但我对如何完成共享依赖项安装和更新到最新版本的要求感到困惑。 Yarn Workspaces 是否可以自行完成要求,或者 Lerna 对此是否有必要?这将如何在 Lerna 中完成?我是否需要定义一个全局 package.json “单一事实来源”,或者工具是否在幕后自己做一些版本? Lerna 或 Yarn Workspaces 如何“知道”如何在没有全局版本范围的情况下将所有单独的 package.json 文件更新到最新版本? (我希望所有项目都一样)

【问题讨论】:

    标签: npm yarnpkg lerna yarn-workspaces


    【解决方案1】:

    Yarn 有一个upgrade interactive 模式,这让这很容易。

    在您的情况下,您希望将 cd 放入 monorepo 的根目录并运行 yarn upgrade-interactive --latest

    这些包将分为两个列表:您的依赖项和 devDependencies,但除此之外按字母顺序排序。您确实必须手动选择要升级的每个库,但所有相同的模块将彼此相邻,无论它们位于哪个子目录中。

    【讨论】:

      猜你喜欢
      • 2019-09-20
      • 2022-06-10
      • 2021-12-17
      • 2021-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 2020-05-10
      • 2019-10-17
      相关资源
      最近更新 更多