nx 和 Lerna 和有啥不一样? (monorepos)

Posted

技术标签:

【中文标题】nx 和 Lerna 和有啥不一样? (monorepos)【英文标题】:the difference between nx and Lerna ? (monorepos)nx 和 Lerna 和有什么不一样? (monorepos) 【发布时间】:2021-07-04 02:43:51 【问题描述】:

你好,我是 monorepos 世界的新手,我现在正在搜索不同的 monorepos 工具 我发现了两个有趣的工具 Nx(nrwl) 和 lerna 但我不明白这两个工具之间的真正区别所以任何帮助和感谢

【问题讨论】:

【参考方案1】:

虽然两者都是处理单存储库的好工具,但它们的用途却大不相同。

区别

Lerna 专注于链接来自同一个项目的多个包并管理 npm 发布,仅此而已

Nx 更专注于管理多个包的开发工作流程。这意味着它可以搭建包,并且对于每个包,您可以定义如何运行和构建它们的配置,类似于 Webpack。

Nx 也可以同时生成多个进程。例如:同时运行前端和后端,无需打开两个不同的终端。类似于 docker-compose。

他们茁壮成长的地方

Lerna 更适合具有多个包的开源项目(因为您可以轻松发布包)。

Nx 更适合处理具有多个包的复杂工作流程。

如何选择

如果您不打算发布您的软件包,Nx 可能更合适。 如果您确实打算发布,但您没有复杂的工作流程,Lerna 绝对是您的最佳选择。 如果你想要两者(发布复杂的工作流程),看起来都不是很好,但你应该选择Nx,并手动管理发布。或者,也许,使用 Lerna 并使用 Webpack 手动配置工作流。

有人可能想知道您是否可以同时选择两者,但我认为它们不能很好地协同工作。在我写这篇文章的时候,Nx 似乎并不关心与Lerna 的兼容性,它Nx 仍然缺乏对轻松发布的支持。

关于术语的重要免责声明

我在这里使用了“包”这个名称,因为“包”是您可以在 Internet 上发布的内容(例如,在 NPM - 节点 管理器中)。 Lerna 使用名称“项目”作为所有包的包装文件夹。通常,一个 git 存储库是一个包含多个“Lerna 包”的“Lerna 项目”。 Nx 使用名称“项目”来指定 Lerna 所称的“包”,并使用名称“工作区”来指定 Lerna 所称的“项目”(即包含所有项目的包装文件夹)。

【讨论】:

我最近选择了 NX,真正帮助我发布的是 NX 插件:github.com/jscutlery/semver

以上是关于nx 和 Lerna 和有啥不一样? (monorepos)的主要内容,如果未能解决你的问题,请参考以下文章

union 和 join 和有啥不一样?

union 和 join 和有啥不一样?

infura 和 geth 和有啥不一样?

";" 和有啥不一样和 T-SQL 中的“GO”?

agora 和 mux 和有啥不一样?在颤动中流式传输实时视频的最佳方式是啥?

vector stack(堆栈)有啥不一样和一样的地方?