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

lerna - 将 Lerna 与 Yarn 工作区一起使用有什么优势吗?

我们正在迁移我们的 monorepo 以使用Lerna

Lerna 支持 NPM 和 Yarn,此外还允许配置与 Yarn 工作区一起使用。我不清楚带有 Yarn 工作空间的 Lerna 是否比带有 NPM 的 Lerna 有任何明显的优势。许多帖子声称 Lerna 与开箱即用的 Yarn 工作区或多或少做相同的事情。

与带有 NPM 的 Lerna 相比,使用带有 Yarn 工作区的 Lerna 有什么优势吗?

0 投票
2 回答
1904 浏览

java - 类似 Lerna 的工具/在 Java 中处理 monorepos

我来自 Web 开发背景,经常参与使用 Lerna 处理 JavaScript 中来自同一存储库的多个包的项目。就目前而言,我需要在 Java 中重新创建其中的一些项目,并且需要知道如何在不使用 Lerna 和使用 Gradle 作为我们的构建工具的情况下做到这一点。

我的问题是关于如何在 Java 中处理包含多个包的大型存储库:

编辑:改写问题以符合指南。将下面的旧问题保留在旧答案中更有意义。

  1. 我是否需要像 Lerna 对 JavaScript 那样使用单独的工具来帮助管理 Java 中的包,或者是否可以使用 Maven 或 Gradle 等构建工具自行处理。
  2. 如果两个团队使用不同的构建工具,是否更容易因为他们的不同贡献而导致问题?
  3. 首先在一个存储库中维护多个 Java 包是否可行?


  1. 是否有任何包或插件已经在 J​​ava 中执行此操作?(我找不到任何东西。)
  2. 解决方案是否可能会在使用不同构建工具进行各种贡献的团队之间引起问题?(例如:Maven 和 Gradle)
  3. 首先在一个存储库中维护多个 Java 包是否可行?
  4. 问这个问题时,有什么我根本无法理解的吗?我是否朝着错误的方向寻找解决方案?
0 投票
2 回答
330 浏览

typescript - 如何在 lerna monorepo 中没有 tsconfig 的包中进行类型检查时避免错误?

我有一个 lerna monorepo,其中包含两种不同类型的包:js 和 css。

我只需要对那些具有tsconfig.json.

当我尝试运行lerna exec tsc时,它在那些没有的软件包上失败并出现错误tsconfig.json

0 投票
1 回答
1220 浏览

reactjs - 如何为 React SSR 和 API 构建 monorepo

我正在尝试了解为 NodeJS/React 项目构建 monorepos 的最佳实践。

我需要:

  1. React SPA 与服务器端渲染。

  2. 后端有 Express、MongoDB、mongoose 模块等。

  3. 一些实用功能、助手、枚举等的共享(公共)模块;

用 monorepo 构建这种架构的优雅方法是什么(我将使用 Lerna)?

  • 我应该分离 API 和 SSR EXpress 服务器吗?
  • 如果是,我应该将 React 前端代码与 SSR 服务器分开吗?
  • 如何配置 webpack 开发环境,所以开发过程中的其他模块总是会得到“共享”模块的转译(Babel)版本(这个问题有点超出范围,可能解决方案很简单)

我知道答案主要是“视情况而定”,但我需要通用的方法,它适用于许多情况,即使它会有点过度设计。

谢谢

0 投票
1 回答
251 浏览

node.js - 构建具有依赖项的 monorepo babel-transpiled 节点 JS 应用程序

我正在开发一个作为 monorepo 托管的项目。为简化起见,假设里面有三个不言自明的包:serverwebapp客户端和library. 目录结构将类似于以下内容:

所有的包都采用流类型表示法,使用一些>ES5 特性,因此,要经过 babel 转译。主要区别在于webapp包的转译是通过 webpack 完成的,而server使用 gulp 任务触发通过gulp-babel包的脚本转译。library构建时会自动转译web

现在,我遇到的问题是,对于server构建,babel 需要library首先构建,并且package.json需要指定它的(构建的)主 JS 源文件,以便可以包含其转译的工件。可以想象,如果项目包含多个正在积极开发的库(确实如此),这将很快成为问题,因为所有库都需要构建,包括任何依赖包(就像server在这个简单的案例中一样)。

作为克服这种烦恼的尝试,我最初考虑使用 webpack 来构建服务器,这将负责将所需的任何依赖项包含在一个包中,但我遇到了问题,因为显然 webpack 不打算在节点 JS 上使用应用程序。

有哪些策略可用于构建需要 Babel 转译的节点 JS 应用程序,以便应用程序的源文件以及任何依赖项透明地构建并包含在单个输出目录中?


附件 A

用于脚本转换的简化 gulp 任务,由server.

从上面可以看出,server任务中只包含了自己的源文件。如果src要更改为也包含,则该任务将在自己的输出目录library中发出依赖项的工件,并且其中的任何语句都将尝试在而不是中定位构建的工件,从而导致导入失败。serverrequire('library')packages/librarypackages/server/dist

0 投票
1 回答
2333 浏览

typescript - TypeScript:同时监视和编译多个目录(monorepo)

我一直在网上搜索解决方案,但没有发现任何有价值的东西。基本上,我正在寻找一种工具或某种方式来同时在多个目录中启动 TypeScript 文件监视/编译。

我有一个带有范围 NPM 包(@test/one、@test/two、@test/three 等)的 monorepo,我想同时观看/编译所有这些包。

看起来 TS 不支持这一点,也没有任何工具可以做到这一点。我发现的最接近的东西是 nodemon,我可以让它一次监视多个目录,但它只支持在单个位置执行脚本/二进制文件,而我需要它在每个监视目录中执行更改时执行“tsc”。

我可以用 nodemon 做的最好的事情是以下,但这当然不是一个很好的方法,因为它编译所有包,即使只有一个更改:

同时我可以在 package.json 中执行以下操作,这更好,但仍然可以做得更好:

有任何想法吗?

0 投票
2 回答
3907 浏览

reactjs - 我可以在一个 monorepo 中有多个 babel.config.js 吗?

我有一个结构如下的monorepo

所以我的和包的babel配置是一样的,而包的配置是不同的。mobiledesktopserver

现在,我怎样才能完成该配置?我能想到的一种解决方案是,babel.config.js在 monorepo 的根目录下有 a ,它将具有包的配置mobile和包的配置,以及包级别的包desktop的单独配置。我不确定,我们甚至可以有多个.serverbabel.config.jsserverbabel.config.js

0 投票
0 回答
45 浏览

reactjs - 为 React 项目维护 monorepo

我正在寻找的是定义我的功能的主包/Sdk,现在我有这个 Sdk 的各种构建版本和自定义功能,现在每当我向主包添加新功能时,它会自动反映在其他构建版本中,我在不久的将来可能会有很多版本,所以保留不同的 repos/branch 然后合并它们的想法可能会变成一场噩梦(我现在就这样做)。

我曾想过创建一个基于配置的系统,但随着 sdk 的增长,维护这些配置文件将比合并项目更具挑战性。

Android做这样的事情,例如

我有我的 MainActivity(顶级文件)

我有一个构建版本,它有自己定制的 MainActivity

现在当我更新我的顶级文件时,我也会在我的构建文件中看到这些更改。

注意:添加的所有功能都不会引发合并冲突(只要我不更新旧功能)。任何建议,StackOverflow 阅读推荐都会有所帮助。

0 投票
1 回答
2851 浏览

angular - 在 Nrwl/Nx 工作区中包含一些库的包

似乎在 Nrwl/Nx 工作区中只有一个 package.json 文件。现在,如果我们有多个应用程序,每个应用程序依赖于不同的包,那么我们必须将所有这些包包含在单个 package.json 文件中,这样在构建时不会增加所有应用程序的大小吗?(推测的 vendor.js 文件)。

例如,如果 app-1 依赖于 d3 而 app-2 依赖于 ag-grid 库,那么这两个库不会不必要地同时包含在 app-1 和 app-2 中吗?当 app-1 的用户访问应用程序时,不需要为他们加载 ag-grid。

我的理解是正确的还是我遗漏了什么?如果我的假设是正确的,有没有办法解决这个问题?

延迟加载的库怎么样?例如,仅对某些用户(具有管理员角色)可用的“管理员”库可能需要某些图形包,而不必为所有用户加载。

谢谢你。

0 投票
1 回答
766 浏览

node.js - 使用 lerna 为 react 和 node js web 应用程序实现 monorepo

我正在尝试构建一个 monorepo ,它由一个 react 和 node js 应用程序组成,所以前端文件夹是使用 react app 创建的,后端文件夹包含所有服务器代码。

我已经完成了以下步骤

全局安装 lerna

创建了一个新文件夹并初始化了存储库。

在新文件夹中运行 lerna init,它创建了 2 个文件 lerna.json、package.json 和 1 个文件夹作为包。

在packages文件夹中我运行create-react-app frontEnd,它创建了一个新的react应用程序

运行命令 mkdir backEnd,在 packages 文件夹中创建 backEnd 文件夹

现在我的包文件夹包含两个文件夹 frontEnd 和 backEnd。

前端由 create-react-app 附带的 package.json 组成

问题

我需要从前端文件夹中删除 package.json

我如何在根文件夹中配置 lerna.json 和 package.json。

我怎样才能运行应用程序?

我已经搜索过,但我没有得到使用 create-react-app 使用 lerna 制作 react-nodejs 应用程序的解决方案