npm、pnpm、cnpm、yarn、npx之间的区别
区别
特性 | npm | yarn | pnpm | cnpm | npx |
---|---|---|---|---|---|
核心定位 | Node.js 默认包管理 | 增强稳定性与性能 | 高效存储与严格隔离 | 国内镜像加速工具 | 临时执行包命令 |
依赖存储方式 | 扁平化 node_modules | 扁平化 + lock 文件 | 全局硬链接 + 符号链接 | 同 npm | 不适用 |
安装速度 | 较慢 | 较快(并行下载) | 最快(复用缓存) | 快(国内 CDN) | 不适用 |
磁盘占用 | 高 | 高 | 极低(共享存储) | 高 | 无 |
依赖隔离性 | 弱(依赖提升) | 中(lock 文件控制) | 强(符号链接隔离) | 同 npm | 不适用 |
Monorepo 支持 | 基础(workspaces) | 强大(workspaces) | 原生支持 | 不支持 | 不适用 |
锁文件 | package-lock.json | yarn.lock | pnpm-lock.yaml | 同 npm | 无 |
安全性 | 中 | 高 | 极高 | 低(镜像源风险) | 中 |
国内网络优化 | 无 | 无 | 无 | 有(淘宝镜像) | 无 |
典型命令 | npm install | yarn add | pnpm add | cnpm install | npx create-app |
适用场景 | 简单项目、兼容性需求 | 中大型项目、稳定性 | 大型项目、Monorepo | 国内网络环境加速 | 临时执行 CLI 工具 |
关键解读
1. 存储机制
pnpm 通过硬链接复用全局依赖,节省 70%+ 磁盘空间。
npm/yarn 的扁平化结构易导致依赖冲突。
2. 安装效率
pnpm > yarn > npm(尤其在依赖重复场景)。
cnpm 依赖国内 CDN,适合解决网络问题。
3. Monorepo 支持
pnpm 和 yarn 有原生优化,npm 需手动配置。
4. 安全性
pnpm 严格隔离依赖,避免非法访问;cnpm 镜像源需注意信任问题。
5. 临时执行
npx 专为运行一次性命令设计(如脚手架工具),无需全局安装。
如何选择
-
个人/小团队:优先 pnpm(省空间+快)或 yarn(功能全)。
-
国内网络环境:用 cnpm 加速,但生产环境切回 npm 或 pnpm。
-
Monorepo 项目:pnpm 或 yarn workspace。
-
临时执行 CLI:无脑 npx。
代码示例
安装依赖
# npm
npm install lodash
# yarn
yarn add lodash
# pnpm
pnpm add lodash
# cnpm
cnpm install lodash
运行命令
# npm
npm run dev
# yarn
yarn dev
# pnpm
pnpm dev
# npx(临时运行)
npx vite create my-project