问题标签 [monorepo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2334 浏览

node.js - 使用纱线工作区时如何在所有包中增加版本?

使用时Yarn Workspaces,我们的项目结构如下:

如果package-b这个目录中的许多其他包都依赖package-a并且我package-a在进行一些更改后升级了版本,我如何升级package-a所有依赖包中的版本?我必须手动完成还是有更好的方法?

0 投票
0 回答
657 浏览

git - 如何在 Github 上的 Monorepo 中进行组权限

所以我们转移到一个单一的仓库结构,我留下了一个问题,即如何在一个团队的基础上限制对仓库中各个组件的访问。github(尚未)上没有允许在子目录上设置组权限的功能,所以我想知道所有这些公司已经在使用 monorepos 或切换,他们如何限制每个团队实际可以访问的内容?

0 投票
0 回答
432 浏览

javascript - Bazel:与 npm 项目集成?

我有兴趣在我的项目中使用 Google 的开源Bazel

我的项目是一个由三个子项目组成的monorepo :

  • Core-松露项目。
  • Core.js- 一个 JavaScript 库,其中包括一些来自Core.
  • Muse-使用. react_reduxCore.js

我想Bazel用于以下用途:

  1. 如上所述构建依赖链。
  2. Travis CI的持续集成和测试。
  3. 生成文档。
  4. 在发布到指定的发布分支时自动将工件部署到npm并部署Core使用。truffle

几个问题:

  1. 与现有(非密封)构建系统集成的难易程度如何Bazel,例如:webpack、、truffle等。
  2. 我无法事先静态知道输出文件的情况怎么办?
  3. Bazel对我习惯于npm基于项目的目录结构和工作流程有多大影响?
  4. 它可以用来进行描述的自动部署吗?
  5. 制作这样一个构建系统需要多复杂/专业知识Bazel
0 投票
3 回答
9327 浏览

jenkins - Jenkins 多分支管道仅用于子文件夹

我有 git monorepo 和不同的应用程序。目前,我在根文件夹中有单个 Jenkinsfile,其中包含应用程序所有的管道。当提交只更改了一个应用程序时,为所有应用程序执行完整的管道非常耗时。

我们使用类似 GitFlow 的方法进行分支,因此 Jenkins 中的 Multibranch Pipeline 作业非常适合我们的项目。

我正在寻找一种在 Jenkins 中拥有多个工作的方法,每个工作只有在更改相应应用程序的代码时才会被触发。

对我来说完美的解决方案如下所示:

我在 Jenkins 有几个多分支管道工作。每一个都只查找给定目录和子目录的更改。每个人都使用自己的 Jenkinsfile。作业每 X 分钟拉一次 git,如果现有分支中的适当目录发生更改 - 启动构建;如果有对适当目录进行更改的新分支 - 启动构建。

是什么阻止了我的实施

  1. 我缺少一种方法来定义在多分支管道执行扫描期间必须忽略哪些文件夹的提交。Multibranch 管道的“其他行为”没有“轮询忽略对某些路径的提交”选项,而 Pipeline 或 Freestyle 作业有。但我想使用多分支管道。

  2. 此处描述的解决方案对我不起作用,因为如果会有新分支仅对“project1”进行更改,那么每当触发“project2”的多分支管道时,它无论如何都会发现这个新分支并构建它。意味着对于每个新分支,我的每个 Multibranch 管道都将至少执行一次,无论是否对适当的代码进行了更改。

感谢任何帮助或建议,我可以如何实现几个多分支管道来监视同一个 git 存储库,但仅在适当的代码更改时触发

0 投票
1 回答
1535 浏览

git - 仅在包更改时在 VSTS 中构建 Monorepo

在 VSTS 中使用 monorepo 时,有时我只在一次提交中更新一个包,而不是所有内容。在这种情况下,我只想运行该特定部分的构建,而不是其他任何东西。

我正在使用持续集成,因此它会在任何时候构建master,例如。遗憾的是,这个构建过程可能需要一段时间,如果只修改了一部分代码,我只想构建那个项目。

由于我正在更新 Git 提交,我可能正在寻找是否对特定目录中的文件进行了更改,但我相信一定有更好的方法。

注意:我的项目使用 Node.js 和 Webpack 并使用 Docker Compose 构建。

0 投票
2 回答
1853 浏览

javascript - 通过 git URL 从 lerna 管理的 monorepo 安装包

我正在为我的项目使用纱线。我的项目有一个依赖项,它恰好是 lerna 维护的较大 monorepo 的子包。子包已更新但尚未发布,我需要未发布的代码。有没有办法通过 git url 安装 lerna 的子包?

谢谢。

0 投票
0 回答
358 浏览

node.js - 两个 lerna monorepos 之间的相互依赖关系

我有两个我想同时开发的monorepos。这是结构:

Monorepo A

Monorepo B

以下是依赖项:

我在用着

两个monorepos上的命令。这使得一个单一仓库中的一切都很好。现在我经常做

在 monorepoB 中遵循它们的依赖关系。

虽然这适用于组件 B2,但它对组件 B1 失败。问题似乎是,如果链接的组件本身依赖于某个内部包,则链接将不起作用。

如果我在 monorepoB 中执行 npm ls componentA2 我得到

但是到 componentA1 的链接是有效的(但它没有传递依赖)。

如何解决这个问题?

0 投票
1 回答
2178 浏览

javascript - 使用 TFS CI 发布多个 cobertura 覆盖

我有一个使用 lerna 创建的 monorepo 项目。而且,我使用 Karma+Jasmine 进行单元测试。项目结构如下所示:

coverage.xml测试设置工作正常,并在每个单独的包中生成 html 报告以及Cobertura 格式。在 TFS CI 中,我有一个“发布代码覆盖结果”构建步骤来发布覆盖结果,其中不同选项的值如下:

  • 代码覆盖工具:Cobertura
  • 摘要文件:$(System.DefaultWorkingDirectory)\packages\*\coverage\cobertura\coverage.xml
  • 报告目录:($(System.DefaultWorkingDirectory)\packages\*\coverage用于 HTML 报告)

但是,构建步骤会警告以下内容

找到多个文件或目录匹配项。使用第一个匹配项:C:\MyAgent\path\to\packages\package1\coverage\cobertura\coverage.xml

找到多个文件或目录匹配项。使用第一个匹配项:C:\MyAgent\path\to\packages\package1\coverage

当然,它也只显示一个包的覆盖结果。有什么方法可以发布所有覆盖率报告,而无需在 CI 中为每个包添加构建步骤?

0 投票
2 回答
2282 浏览

yarnpkg - 使用纱线工作区在monorepo中跨项目共享配置变量?

是否可以在使用纱线工作区设置的 monorepo 的子文件夹之间共享配置变量/环境变量?我们有一个项目的 monorepo,其中几个子文件夹是使用 create-react-app 构建的项目。在这些单独的文件夹中,我们可以使用 .env 文件来指定配置值,当我们在单独级别使用 package.jsons 中的构建/启动脚本时,它们会很好地使用。

但是,我们还有其他子文件夹,它们只是导入 CRA 应用程序的库。我们想在这些库中指定 config/env 变量,但到目前为止还没有找到一种方法来在我们构建或启动导入库的项目时传播这些值。已经在库本身以及 CRA 应用程序根文件夹中尝试了 .env 文件,但似乎没有任何效果......

0 投票
1 回答
1398 浏览

versioning - 使用 lerna monorepo,如何引用共享包的不同版本?

lerna 和 monorepo 的新手,我的理解是 lerna,我们将所有共享包和所有消费者包放在一个 repo 中。然后在“lerna bootstrap”之后,consumer1 和 consumer2 都会有一个到 shared1 的本地链接(符号链接)。因此,每当我在 shared1 中进行更改时,consumer1 和 consumer2 都会受到影响。

有没有办法让consumer1 和consumer2 指向不同版本的shared1?这样当我在 shared1 中进行更改时,只有 consumer1 受到影响,而 consumer2 不受影响。