问题标签 [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.
git - Git子模块有效地跟踪分支
我想在我的公司内推广 monorepo 的想法。
我打算这样使用它们:
我有一个“父”仓库为我们堆栈的每个组件保存一个子模块,因此维护整个堆栈的全局版本控制(我们可以简单地检查给定分支上的每个组件)
这听起来很完美,因为我们仍然可以从任何开箱即用的 CI 服务中受益(我们是否仍在推动独立的 git 存储库,子模块)。
这种方法的唯一(可怕)弱点是,如果
使用以下配置:
每个子模块都在正确的提交处有效地签出。
但是:他们都在超然的头脑中
为什么没有办法有效地使用带有分支的 gitsumodule。即:更新时,有效地签出分支而不是该分支指向的提交?是否出于技术原因或根本尚未在 git 中实现?
谢谢
gradle - 从 TeamCity 10 中的多个 Gradle 构建步骤收集和汇总 jacoco 结果
我有以下设置:
我有一个 monorepo,里面有多个独立的基于 Gradle 的构建。我为 repo 中的每个项目添加了一个构建步骤,使用每个子目录作为该构建的工作目录。我使用 TC 的 jacoco 增强器生成每个项目的 junit4 测试运行报告。
目前发生的情况:
仅保留最后一个构建步骤的报告,并使其成为构建概述中显示的报告。我可以在日志中看到,所有 jacoco 报告都按预期生成。
我想实现以下目标:
我希望汇总所有报告并将其视为构建的整体覆盖范围。
非常感谢任何帮助!
continuous-integration - 如何在 monorepo 中对产品进行版本控制?
我一直在对自己进行有关 monorepos 的教育,因为我相信它对我的团队和我们项目的当前状态来说是一个很好的解决方案。我们有多个网络产品(客户端门户、内部门户、API、核心共享代码)。
我正在努力寻找我想要找到的答案的地方是版本控制。
当您的所有项目和产品都在一个单一存储库中时,版本控制策略是什么?
- 1 版本适合所有人?
- 具有独立版本控制的 Git 子模块(有点打破了拥有单一存储库的点)
- 其他策略?
从 CI 的角度来看,当您在项目 A 中提交某些内容时,您是否应该在所有项目中启动整套测试以确保没有任何问题发生,即使没有必要对依赖/共享模块进行更改?
intellij-idea - Typescript:Yarn Workspaces IDE 支持(IntelliJ、VSCode ...)
在处理一个更大的 typescript 项目时,我们决定将代码移动到带有yarn workspaces的 monorepo 中。
我们使用webpack构建和打包,一切正常(尤其是本地模块/包之间的链接)。
由于 yarn 工作区会将大部分 node_modules 存储在 monorepo 的根文件夹中,因此 IDE(IntelliJ 和 VSCode)在“内部”项目(所谓的 monorepo 的“包”)中编码时无法解析对任何 node_modules 的导入)。
奇怪的是导入是未知的,但另一方面,如果您手动将其写下来,大多数情况下您可以导航到 IDE 中的正确源/定义以进行相同的导入。
我们试图告诉 IntelliJ 查看另一个文件夹中的 node_modules,但仍然不满意。
请分享您在 yarn 工作空间/monorepo(例如 lerna)方面的经验,以及您如何在这些 monorepos 中开发代码。
您使用哪个 IDE?
您是否向 IDE 和/或 package.json、tsconfig.json 添加了任何特殊配置?
ember.js - 如何在没有插件的情况下在多个应用程序中使用共享组件
我们有四个共享许多组件的应用程序。到目前为止,我们使用插件来管理这个共享代码,但是我们在使用插件方法时遇到了很多麻烦。
像这样的东西:
这种方法的问题是更新插件是一个相当长的过程,涉及很多步骤:
- 将插件链接到应用程序(使用纱线链接)
- 修改插件代码
- 将插件发布到 npm
- 更新 App1 中的依赖项
- (可能如果我有时间和精力,也可以更新 App2、3、4 中的依赖项和使用情况,或者将其留给其他接触该代码的人 :cry:)
除此之外,还有其他问题 - 维护 8 个不同的 ember 应用程序需要花费大量时间 - 更新 ember 版本 - 更新其他依赖项 - 维护相同的 linting 配置和其他工具
这些是我们现在使用这种方法面临的最大问题。
我不知道这个问题的最佳解决方案是什么,但我的想法是我们将 - 将所有插件合并到一个插件中(现在可能只需要 ember 树的一部分,它不应该产生不好的影响代码大小,对吗?) - 将所有代码移动到一个存储库(一种 monorepo) - 使用插件不作为 npm 依赖项,但以某种方式从同级目录中导入它(我不知道这是否可能)
所以最后,我们会得到这样的东西
那可能吗?我需要做什么来实现这个设置?或者你有更好的解决方案吗?
感谢您的任何帮助,Ondrej
npm - monorepo 的单一依赖管理
我正在使用lerna
. 我有一个主包,我的应用程序 ( app
),它是一个react
应用程序和几个其他包,它们通常是react
组件。
应用程序.js
在这里,我正在导入CollectionBrowser
导出react
组件:
CollectionBrowser.js
现在有两件事困扰着我:
- 我要导入和捆绑
react
两次,一次在我的主应用程序中,另一次独立于我的 CollectionBrowser 中。有没有一种只捆绑react
一次的好方法? - 我有 2 个(或任意数量)构建脚本,一个用于我创建的每个包。难道没有一个很好的方法来拥有一个捆绑器和一个转译过程吗?
shell - 获取受 git monorepo 最近提交影响的所有 1 级目录的列表
我目前正在使用 monorepos 并且我正在尝试检索 repo 中自给定提交以来受到影响的所有 1 级子文件夹的列表。
到目前为止,我可以检索所有受影响的文件git diff --name-only $COMMIT_ID..head
使用git diff --name-only $COMMIT_ID..head | xargs -L1 dirname
我设法只获取文件夹名称。
sort | uniq
要删除我添加到组合中的所有重复项:git diff --name-only $COMMIT_ID..head | xargs -L1 dirname | sort | uniq
我现在需要的是确保我只检索第一级文件夹,即project1
不project1/src
和project1/lib
我尝试了一些选择,但到目前为止我还没有设法将它保持为一个班轮。
jenkins - 詹金斯管道可以将控制权传递给另一个詹金斯文件吗?
我们有一个包含几个相关项目的 monorepo。根据触发构建的项目,需要构建不同的项目集。这些项目都有自己的 Jenkinsfile,它只构建和部署该项目。
我想制作一个基本上充当路由器的顶级 Jenkinsfile。有一个小的 switch 语句来构建一个项目列表,以正确的顺序构建,然后依次启动每个 Jenkinsfile。
这可能吗?谢谢。
node.js - 具有不同框架库集的 monorepo 的 GIT 版本控制策略
我正在分析我的一些框架节点模块/库的 monorepo 策略,这些模块/库当前属于不同的存储库。我有大约两打节点模块/库,并非所有这些都由单个应用程序使用。很少有应用程序只使用单个节点模块/库,而其他应用程序则使用 5 个以上。我正在为这些模块使用 semver。
如果我搬到 monorepo,在以下情况下最好的 GIT 分支策略是什么
- 我计划在任何时候都只支持一个模块的两个主要版本。(最新和最新的-1)。最新的应该有所有的增强和重大变化。latest - 1 是为了支持以前版本的错误修复。这种情况下最好的分支模型是什么?请注意,我团队中的另一位开发人员可能会修改不同的模块以修复错误,或者他/她可能会向模块添加新的增强功能。我们如何在单个 repo 中分离我们的更改?在这种情况下,什么是经过验证的分支模型
linux - 一棵单树是如何用 git 组织的?
我最近看到Greg Kroah-Hartman的一篇文章,关于为什么 Linux 内核没有稳定的 API 以及内核存储库是如何组织成单树的。当我和一位朋友讨论这篇文章时,很明显我们对这个词的含义有了不同的理解tree
:
tree
指项目的不同子文件夹。- 它指的是 git master 分支的不同分支。
在第一种情况下,贡献者不会签出完整的项目,例如 Linux 内核,而只会签出一个子文件夹。然后可以将这些与例如git-subtree
.
在第二种情况下,贡献者必须检查整个项目并基本上创建一个 monorepo 的分支。
那么tree
在 monotree 中指的是什么以及如何使用 git 将项目组织为 monotree?