问题标签 [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 回答
92 浏览

javascript - 通过 Typescript 支持将一个项目中的捆绑代码包含到另一个项目中

我正在开发一个有两个子项目的项目:我们称它们ProjectAProjectB. 这些是完全不同的项目,但都是用 Typescript 编写的,并使用 webpack 作为打包器。

在开发过程中,我想使用 in 的某些部分ProjectAProjectB但总体要求是ProjectB必须将所有代码ProjectA作为外部依赖项使用 - 通过 script 标签,而不是通过 npm 安装等。

所以我的想法是捆绑 的代码ProjectA,使用输出配置属性的库选项webpack,将生成的捆绑包托管在某处,并ProjectB通过脚本标记将其包含在其中。ProjectA但是由于我会在开发过程中使用一些功能ProjectB,所以我也想从中Typescript受益。

有人可以在这里指出我正确的方向吗?

0 投票
0 回答
1617 浏览

typescript - TypeScript:在项目之间共享代码的最简单方法

我正在编写一个 React.js 应用程序和一个 React Native 应用程序,它们都作为 Lerna monorepo 中的单独 NPM 包。我想要做的是有一个“共享库”类型的项目,它可以保存两个项目共享的 TypeScript 文件,而且看起来几乎不可能以一种简单而干净的方式来做。

如果我将共享库创建为 NPM 包,即使我对它进行符号链接,我也需要在它发生更改时重新编译它。我正在寻找一种将 TypeScript 文件直接从共享项目导入到 React.js 和 React Native App 的编译过程中的方法。

我还阅读了有关 tsconfig.json “路径”设置的信息,并尝试执行以下操作:

然后我尝试导入一个类,例如: import { x } from "@shared-types/Types" 但这也不起作用,TypeScript 说它无法解析模块。

我不知道为什么做这么简单的事情如此困难,我希望这里有人有一个好的、干净的解决方案。

0 投票
2 回答
3244 浏览

babeljs - Babel:根编程选项

我似乎完全不知道在哪里放置 babel 的根编程选项。

如果我有一个 monorepo 并且需要告诉不同的子包它们应该向上查找我的 babel.config.js 那么我应该放入rootMode: "upwards"子包的 .babelrc 中,对吗?这不起作用,因为产生的错误

Error: .rootMode is only allowed in root programmatic options

不知何故,我根本找不到任何在哪里放置/使用根编程选项的例子......谁能指出我正确的方向?

0 投票
1 回答
485 浏览

node.js - monorepo 中微服务的 Codeship 独立 CI

目前我们有一个 NodeJS 单体应用程序。测试在 Codeship 中运行,如果测试为绿色,则代码将部署到 Heroku。这很容易。

所以我们想把我们的单体应用分解成微服务,我们更喜欢 monorepo 解决方案。

例如,我们在 repo 中有service-1and 。service-2我们想为 Codeship 上的每个服务设置独立的 CI 和部署管道。

您知道我们如何设置理想的 CI 吗?

0 投票
1 回答
218 浏览

git - 在开发过程中如何处理提交到多个分支?

我正在寻找最新的知识/最佳实践/建议。

我们正在考虑为我们的发展转向单一回购。我们将 Scrum 与 Stories/Epics/Sprint 一起使用(我对所有术语都没有完全了解……我老了,一些新东西看起来就像旧东西……只是名称不同)。

我们理解为开发人员定义小工作单元的必要性,但通常情况下,多个单元具有一定程度的相互依赖,但用于系统的不同部分。

开发人员可以同时处理多个,因为这样更有效(并且使任务更容易实现),但任务是分开的,每个任务都需要自己的审查。

我们想要的是能够“检查”当前功能分支的代码(我正在使用 git 术语,就像我们目前正在使用的那样),允许开发人员进行编码,运行在本地测试,如果满意,将特定更改提交到不同的分支。因此,例如,迁移更改转到迁移任务的分支,API 建模/映射更改转到相应任务的分支等。

每个任务都为故事设置了适当的阻塞,因此发布经理可以按正确的顺序发布所有内容(即,您不能发布数据存储中不存在的列的 UI 更改)。

用 git 实现这样的事情是非常麻烦的。

对我们来说,一个功能分支是一个故事(即客户希望能够让他们的客户能够更改预订的会话时间,假设存在可用性,如果需要,可以发出退款或要求进一步付款)。为了实现这个故事,需要完成各种任务(新数据、UI/UX 工作、API 工作等)。这些中的每一个都是为故事定义的任务。每个都有自己的分支。

有更好的选择吗?

如果没有,是否有更好的做法可供任何人推荐?

0 投票
2 回答
930 浏览

python - Jenkins 可以在具有多个包的 monorepo 中只构建一个 python 包吗?

假设有一个 monorepo,在不同的目录中有几个可独立构建的 python 包,格式如下所示,其中foobar是可独立构建的。

现在假设有人将代码推送到托管它的 git 存储库,并且代码修订仅存在于bar包中。如果詹金斯接受了推送,詹金斯有没有办法检测哪个包被改变了,只构建和部署改变的包,例如bar

或者,无论推送了哪些更改,让 Jenkins 在一个 monorepo 中重建/重新部署所有包是否只是标准做法?

0 投票
1 回答
3334 浏览

javascript - lerna 链接与 lerna 引导程序

我有一个 Lerna 项目,直到最近才使用lerna bootstrap --hoist. 这工作得很好,但我发现devDependencies许多子文件夹中的大部分都是相同的。升级到我读到的 Lerna v3lerna link convert.

lerna link convert 是否只是将所有子文件夹移动devDependencies到根目录,子文件夹扫描父文件夹node_modules以加载它们(NPM 的一个功能)?我注意到子文件夹中的依赖项更改为“file://”而不是私有 npm 存储,这表明一旦发布和使用它们就不会被加载。

此外,如果lerna bootstrap被删除,则dependencies不会安装子模块。使用什么方法来解决这个问题?

0 投票
1 回答
1261 浏览

typescript - Vue-CLI、TypeScript 和 monorepo:如何在 /src 之外声明类型?

如何让 CLI 在特定@types文件夹中查找类型声明?

*.d.ts在文件夹中创建的任何/src内容都已加载并且可以正常工作,但是如果我将它们移到外面的任何地方,/src我什么也得不到。

我的目标是这样做(作为monorepo):

我试过compilerOptions.typeRoots没有成功。

0 投票
0 回答
65 浏览

git - 将存储库合并到 monorepo 后如何查看项目日志?

假设我有一个 monorepo,其目录名为monorepo. 在 multirepo 中,每个项目都有自己的目录。还假设我有另一个名为project-a我希望放入 monorepo 的现有存储库。

为了project-a放入现有的 multirepo,我这样做了(取自这个问题):

至此, 的历史(即 的输出git logproject-a已经与 monorepo 中的现有历史无缝合并。但是我如何查看project-a仅历史?即我如何查看它的历史,project-a就好像它没有被合并到monorepo中一样?

我试过git log -- project-a/了,但这只显示了一个提交(即'Move all files into a directory in preparation for conversion to monorepo'),而我原本打算查看我为project-a.

0 投票
1 回答
1099 浏览

azure - lerna monorepo中的vscode启动功能应用程序

首先,我有一个结构如下的 monorepo:

后端是一个 Azure 函数应用,其结构如下:

其次,对于backend's package.json,我有一个脚本:

start-debug.sh脚本如下所示:

我正在尝试编写启动配置,以便可以在 VSCode 中调试我的函数。

根据我在那里发现的内容,我尝试了许多变体,但似乎没有任何效果。有没有人有什么建议?

这是我最近的尝试: