nx 和 Lerna 的区别?(monorepos)

deg*_*eg9 5 javascript lerna monorepo nrwl nrwl-nx

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

day*_*aes 22

尽管两者都是使用 mono repo 的好工具,但它们的目的却大不相同。

差异

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

Nx更专注于管理多个包的开发工作流。这意味着它可以为包提供脚手架,并且对于每个包,您可以以类似于 Webpack 的方式定义有关如何运行和构建它们的配置。

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

他们茁壮成长的地方

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

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

如何选择

  • 如果您不打算发布您的软件包,Nx可能更合适。
  • 如果您确实打算发布,但您没有复杂的工作流程,那么Lerna绝对是要走的路。
  • 如果您同时想要(发布复杂的工作流程),似乎都不是很好,但您可能应该选择Nx,并手动管理发布。或者,也许,使用LernaWebpack 手动使用和配置工作流。

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

关于术语的重要免责声明

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

  • 我最近选择了 NX,真正对我的发布有帮助的是 NX 的插件:https://github.com/jscutlery/semver (7认同)
  • 抱歉这么挑剔,但“NPM - 节点包管理器”不正确。查看 npm 存储库:https://github.com/npm/cli#is-npm-an-acronym-for-node-package-manager (3认同)
  • 我决定使用 lerna 因为我想为将在不同项目中使用的多个依赖项创建一个 monorepo (2认同)