Node 是运行环境,nvm 管 Node 的版本,npm 和 pnpm 管项目依赖包。
nvm 和 npm/pnpm 不在同一层,不能互相替代。
| 名称 | 含义 | 作用 | 层级 |
| Node.js | JavaScript 运行时 | 让 JavaScript 能脱离浏览器,在电脑上运行 | 运行环境 |
| nvm | Node Version Manager | 安装、切换、删除多个 Node.js 版本 | Node 版本管理 |
| npm | Node Package Manager | 安装、更新、删除项目依赖,运行脚本,发布包 | 包管理器 |
| pnpm | Performant npm | 更快、更省磁盘空间的包管理器,可替代 npm | 包管理器 |
它们之间的关系如下所示:
nvm
└── 管理 Node.js 版本
└── 每个 Node.js 自带一个 npm
└── npm 和 pnpm 是同类工具,都用来管理依赖包
- nvm 切换的是 Node.js 本身。
- 切换 Node 后,
node、npm、npx都会跟着变。 - npm 随 Node.js 一起安装,通常不用单独装。
- pnpm 需要额外安装,但可以替代 npm 的日常包管理功能。
以下是需要注意的一些点:
- nvm 不能替代 npm。
nvm 只管“用哪个 Node 版本”,不管“装哪些包”。 - pnpm 可以替代 npm 的包管理功能。
日常的install、add、run、publish等,pnpm 基本都有对应命令。 - npm 删不掉,也不建议删。
它随 Node 安装,有些工具或脚本仍可能调用它。你可以日常只用 pnpm,但保留 npm 作为后备。 - 同一个项目不要混用 npm 和 pnpm。
否则会出现package-lock.json和pnpm-lock.yaml两套锁文件,node_modules结构也可能混乱。