问题标签 [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 投票
0 回答
557 浏览

node.js - 使用 monorepo 时如何让 Heroku CI 运行测试?

node-server我在一个名为monorepo 项目的子目录中有一个 nodejs 应用程序。

当我直接执行这样的推送时,我能够利用heroku-buildpack-monorepo项目将节点服务器目录部署到 Heroku:

git push heroku master

这将运行 monorepo buildpack,它将子文件夹复制到暂存目录,清除整个根结构,然后将根目录替换为暂存目录的内容。然后它继续自动检测我的 nodejs buildpack,一切正常。

但是现在,我正在尝试设置 Heroku CI,以便在我直接提交到 Github 时自动检测和运行我的测试并暂存我的应用程序:

git push origin mybranch

我已经按如下方式设置了我的 app.json 文件:

问题是 Heroku 在暂存代码以进行测试执行时设置了一个只读文件系统,从而使 monorepo buildpack 无法使用:

有没有其他方法可以让 Heroku CI 与 monorepo 一起工作,以便它可以检测 buildpack 并在子目录中执行测试?

0 投票
2 回答
711 浏览

reactjs - 在创建反应应用 Reactjs 应用程序中使用通用 Sdk 模块共享代码库

我想开始一个新的应用程序,它将同时具有 web 和 reactnative 界面。

我决定将所有业务 - 非环境相关 - 代码移动到第三个包 - aka sdk- 我可以在 react 和 react native 之间共享。

所以我的项目现在有 4 个模块

  1. 网络——用 cra 创建
  2. sdk——主要是redux + redux saga + react containers + Hoc's
  3. 移动 - 反应原生
  4. 服务器 - nodejs express api。

    • 所有网络、移动和服务器都将依赖于 Sdk 模块。
    • sdk 模块将依赖于服务器模块 - 主要用于引入模拟和数据接口。

有没有标准的方法来实现这种结构?

很可能我很想

  • 使用纱线工作空间将所有节点模块提升到一个文件夹中,以避免在每个项目中重新安装包
  • 我将同时在所有 4 个项目中工作,所以我需要 hotreload 来了解这一点。

**我面临的挑战**

  1. Cra 不会在 src 文件夹之外转换代码,因此尽管 web 项目确实刷新了,但我在 sdk 上进行了更改。它无法理解 es6 代码。
  2. Jest 也不理解来自 node_modules 的 es6

如何在同时处理 sdk 和 web 模块时避免重建步骤?

0 投票
1 回答
159 浏览

git - 添加一个monorepo作为依赖

我在理解这个 monorepo 东西时遇到了一些麻烦。

假设我对这个monorepo感兴趣。如何将它作为依赖项添加到我的项目中?它没有包名。

为了提供更多信息,我只对属于该 monorepo的这个包感兴趣。

我该如何安装它?

0 投票
0 回答
2276 浏览

reactjs - Monorepo 中未安装模块

对于一个新项目,我正在使用 Lerna 和 React Storybook。我想创建一个包含多个包的 monorepo。

我的文件夹结构如下所示:

我想从我的按钮包中的主题包中导入主题,我通过 npm 在我的按钮包中安装它。

在我的按钮包中,我正在导入主题

import theme from '@company/company-theme';

我收到以下错误:

Module not found: Error: Can't resolve '@company/company-theme' in buttonpath

起初我认为这是一个 babel 问题,我在 package.json 中安装了以下 babel 包

在 projectroot 和按钮根目录中,我创建了一个.babelrc并添加了以下代码:

然而问题仍然存在。这里有人知道该怎么做吗?

0 投票
1 回答
188 浏览

git - 掌舵点存储库到 monorepo 包?

我正在尝试设置掌舵图,但我是一名程序员,不知道自己在做什么。

默认情况下,舵图似乎指向一个存储库,我猜这是将启动到 Kubernetes 中的项目的 GIT 存储库。

我假设 helm 将在安装过程中获取该存储库。

当使用每个包都是存储库中的文件夹而不是存储库本身的 monorepo 时,您将如何设置此字段?

0 投票
2 回答
1066 浏览

flowtype - 流程:在使用 Yarn 工作区的 monorepo 中解析模块

我们有一个使用Yarn 的“工作区”功能的 monorepo ,这意味着只要有可能,Yarn 会将依赖项提升到 monorepo 的根node_modules目录,而不是将它们保存在单个包的node_modules目录中。这依赖于 Node 的模块解析算法,该算法继续在 dir 树的目录中搜索模块,node_modules直到找到所需的模块。

在导入另一个包(monorepo 内部或外部)的文件中使用 Flow 类型时,在包含该文件的包中运行 Flow 会导致引发Cannot resolve <package-name>错误。似乎 Flow 使用了不同的模块解析算法,并且由于安装的模块被提升到根目录并且 Flow 不会继续搜索目录树而失败。

除了从根目录运行 Flow 之外,还有其他方法吗?从根目录运行并不是最优的,因为它不允许在 monorepo 中对不同的包进行不同的设置。

节点版本: 10.8.0
flow-bin版本: 0.78.0

0 投票
3 回答
6041 浏览

google-cloud-platform - GitHub Cloud Build 与 monorepo 中的多个 cloudbuild.yamls 集成

GitHub 的Google Cloud Build 集成未检测到cloudbuild.yamlDockerfile不在存储库的根目录中。

当使用包含多个的 monorepo 时cloudbuild.yamls,如何配置 GitHub 的 Google Cloud Build 集成以检测正确的cloudbuild.yaml

文件路径:

Cloud Build 集成输出:

构建失败

0 投票
1 回答
1375 浏览

typescript - 如何使用 Typescript 的引用和构建模式将 mono repo 编译为无服务器包?

Typescript 最近引入了一个与 monorepos 一起使用的新功能:引用。通过指定引用,您可以使用构建所有相互依赖的包tsc -b(另请参阅此博客文章

这似乎非常适合与大型单声道存储库一起使用,其中一些包是无服务器服务。这些服务通常依赖于一个或多个 monorepo 包。我在这里创建了一个示例:

https://github.com/tommedema/serverless-mono-example

虽然构建与 .zip 配合得很好tsc -b,但问题是无服务器框架需要上传单个工件 .zip(在我的例子中是到 AWS)。在构建无服务器服务时,例如这个示例,只会捆绑最近源文件的编译文件。

如何使用 typescript 的引用功能与无服务器单声道存储库一起使用?

0 投票
1 回答
673 浏览

git - 带有 monorepo 策略的 Spring Cloud Config Git 后端

如何按照 monorepo 策略使用 Git 后端配置 Spring Cloud Config?比如说,我的仓库名称是mono-repo,我的应用程序配置位于一个功能分支feature/cloud-application-config中,并且配置位于一个名为 的目录中application-config,我如何配置配置服务器来克隆这个存储库并从这个功能分支获取配置?

0 投票
2 回答
892 浏览

node.js - 如何在 Node.js 中使用 Bazel

我的理解是,Bazel 期望项目位于 monorepo 下,顶层有 WORKSPACE 文件,每个项目中都有 BUILD 文件:

但是,通过Bazel NodeJS 规则文档,似乎建议每个项目都应该有它自己的WORKSPACE文件来定义其依赖项。IE ...

这看起来类似于一个多存储库,每个项目都将其他项目作为外部依赖项引用,这对我来说似乎没问题,直到我意识到对于外部依赖项,Bazel 需要在每个包的 WORKSPACE 文件中指定所有传递依赖项,这绝对不理想。

将 Bazel 与 NodeJS 项目一起使用的最简单方法是什么,有些项目可能是用其他语言编写的?此外,是否有在多回购设置中使用 Bazel 的示例?

谢谢!