Javascript nx和Lerna之间的区别是什么?(单一回购协议)

Javascript nx和Lerna之间的区别是什么?(单一回购协议),javascript,monorepo,lerna,nrwl-nx,nrwl,Javascript,Monorepo,Lerna,Nrwl Nx,Nrwl,你好,我是monorepos世界的新成员,我现在正在搜索不同的monorepos工具 我找到了两个有趣的工具Nx(nrwl)和lerna,但我不明白这两个工具之间的真正区别,所以请提供帮助并感谢尽管这两个工具都是处理mono repo的好工具,但它们的用途却大不相同 分歧 Lerna专注于链接来自同一项目的多个包并管理npm发布,就是这样 Nx更侧重于管理多个软件包的开发工作流。这意味着它可以构建包,对于每个包,您可以定义如何运行和构建它们的配置,方式与Webpack类似 Nx还可以一次生成多个

你好,我是monorepos世界的新成员,我现在正在搜索不同的monorepos工具
我找到了两个有趣的工具Nx(nrwl)和lerna,但我不明白这两个工具之间的真正区别,所以请提供帮助并感谢

尽管这两个工具都是处理mono repo的好工具,但它们的用途却大不相同

分歧
Lerna
专注于链接来自同一项目的多个包并管理npm发布,就是这样

Nx
更侧重于管理多个软件包的开发工作流。这意味着它可以构建包,对于每个包,您可以定义如何运行和构建它们的配置,方式与Webpack类似

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

他们繁荣的地方
Lerna
更适合包含多个包的开源项目(因为您可以轻松发布包)

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

如何选择
  • 如果您不打算发布软件包,
    Nx
    可能更适合
  • 如果您当时确实打算发布,但您没有复杂的工作流程,
    Lerna
    无疑是一个不错的选择
  • 如果同时需要(发布复杂工作流),两者都不太合适,但您可能应该选择
    Nx
    ,并手动管理发布。或者,可以使用
    Lerna
    并使用Webpack手动配置工作流
有人可能想知道你是否可以选择两者,但我认为它们不能很好地配合。在我写这篇文章的时候,
Nx
似乎并不关心与
Lerna
兼容,而且它仍然缺乏对轻松发布的支持

关于术语的重要免责声明
  • 我在这里使用了“package”这个名称,因为“package”是您可以在internet上发布的内容(例如,在
    NPM
    -节点package管理器中)
  • Lerna
    使用名称“project”作为所有包的包装文件夹。通常,git存储库是一个包含多个“Lerna包”的“Lerna项目”
  • Nx
    使用名称“project”指定Lerna称之为“packages”,并使用名称“workspace”指定Lerna称之为“project”(即保存所有项目的包装文件夹)