Logo Vincent
返回文章列表

Nx-VS-Lerna

Web
Nx-VS-Lerna

【前言】

nx和lerna都是优秀的monorepos工具,

本文来对比一下两者的不同,

https://nx.dev/

https://lerna.js.org/

对比之前可以先看下面两篇文章,

了解nx和lerna的基本使用,

一文学会用Lerna管理多个npm包

强大的构建系统:NX

【任务执行】

nx和lerna都可以执行任务,

其实lerna的任务执行就是使用的nx,

单任务执行

# nx
nx run is-odd:build

# lerna
lerna run build --scope=is-odd

多任务执行

# nx
nx run-many --target=build

# lerna
lerna run build

【本地缓存】

lerna默认没有本地缓存能力,

nx默认提供本地缓存能力,

nx开启本地缓存

只需要给项目添加一个nx.json即可

{
  "tasksRunnerOptions": {
    "default": {
      "runner": "nx/tasks-runners/default",
      "options": {
        "cacheableOperations": ["build", "test"]
      }
    }
  }
}

lerna开启本地缓存

1.如上给项目添加一个nx.json

2.或者使用命令行添加

lerna add-caching

【分布式缓存】

分布式缓存是nx-cloud提供的能力,

简单的说就是一人构建,团队缓存,

nx开启分布式缓存

使用下面的命令会将本地的accessToken和nx-cloud账户绑定,

详细使用方式可以看这篇文章: https://blog.insistime.com/nx

nx connect-to-nx-cloud

lerna开启分布式缓存

由于lerna基于nx,所以lerna开启分布式缓存和nx一样

nx connect-to-nx-cloud

执行上面命令后会将nx.json中的runner修改为nx-cloud,

并生成accessToken,如下

然后就可以访问下图中的url和nx-cloud绑定了

【查看依赖】

lerna没有这个功能,

可以直接使用nx的能力,

nx查看包依赖关系

nx graph

【版本管理】

任务执行,本地缓存,分布式缓存基本都是nx的能力,

而lerna主要的能力是版本管理和发布,

nx没有版本管理能力,

lerna进行版本管理

lerna version

效果如下

强大之处在于

1.可以管理多个包的版本

2.包括多个包之间依赖的版本

例如a包依赖b包,如果b包版本更改,会同步修改a包版本

【发布npm】

同上nx没有publish能力,

lerna有publish能力,

使用lerna发布包

lerna publish

效果如下

lerna的publish能力强大之处在于可以同时发布多个包到npm,

对于管理很多已发布的npm包的monorepos来说很好用。

【nx vs lerna】

这里简单总结下两者的不同,

其实lerna底层是nx,使用lerna配合nx是最佳方案,

# lerna使用nx开启本地缓存
lerna add-caching

# lerna使用nx开启分布式缓存
nx connect-to-nx-cloud

# lerna使用nx查看依赖
nx graph
© 2026 vincentqiao.com . 保留所有权利。