npm、pnpm、cnpm、yarn、npx之间的区别
文章目录
- 区别
- 特点
- pnpm
- yarn
- cnpm
- 关键解读
- 如何选择
- 代码示例
- 安装依赖
- 运行命令
区别
| 特性 | 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 工具 |
特点
pnpm
pnpm 使用 硬链接(Hard Link)和符号链接(Symlink) 来管理依赖文件。所有依赖包的实际文件存储在全局的单一内容寻址存储中(类似 Git),不同项目共享相同文件。
优势:
-
节省磁盘空间:
-
所有依赖的每个版本仅保存一份实体文件。(例如,10 个项目都依赖
lodash@4.17.21,磁盘上只保留一份文件。) -
多个项目共用同一依赖的同一版本时,无需重复下载。
-
-
安装速度快:
- 新项目安装依赖时,若全局已有该包,直接创建硬链接,无需重新下载。
-
非扁平化结构:
-
pnpm 的
node_modules结构是非扁平化的,每个依赖只能访问其显式声明的依赖,避免了“幽灵依赖”(Phantom Dependencies)问题。 -
例如,你的项目依赖 A,而 A 依赖 B。在 NPM 的扁平化结构中,你的代码可能直接引用 B(即使未声明依赖 B),导致潜在风险;而 PNPM 会严格限制这种访问。
-
.
yarn
yarn详细入门教程
yarn 在速度、稳定性和 Monorepo 支持上优于 NPM,适合对依赖管理要求严格的场景。若项目已使用 NPM,可权衡迁移成本;若为新项目,Yarn 是更现代的选择(尤其是 Yarn 2+)。
优势:
-
并行下载:
-
可以并行下载依赖包,显著提升安装速度(尤其在依赖数量多时)。
-
早期 npm 安装依赖时是顺序下载且无缓存复用,速度较慢(NPM 5+ 已改进,但 Yarn 仍有一定优势)。
-
-
本地缓存机制:
所有下载过的依赖会缓存在本地,后续安装直接从缓存读取,减少网络请求。
-
lock 文件:
-
yarn 默认生成
yarn.lock文件,严格锁定依赖树中每个包的具体版本和哈希值,确保不同环境下安装的依赖完全一致,防止恶意代码注入。 -
对比:早期 npm 的
package-lock.json在部分场景下可能因版本范围定义不严格导致依赖版本漂移(NPM 5+ 已改进,但 Yarn 的锁定机制更早成熟)。
-
-
离线模式:
yarn 优先从本地缓存安装依赖,即使无网络连接也可完成安装(需提前缓存过依赖)。
.
cnpm
cnpm 是淘宝镜像提供的工具,主要针对国内用户,解决npm在国内下载速度慢的问题。它的核心优势应该在于镜像源的速度和稳定性,以及可能的并行安装提升速度。
cnpm 默认使用淘宝镜像源(https://registry.npmmirror.com),所有依赖包会从国内服务器下载,避开国际网络延迟。
优势:
-
下载速度极快:
-
国内用户安装依赖的速度可提升 5-10 倍(尤其对大体积包如 node-sass、electron 等效果显著)。
-
避免因国际网络波动导致的安装失败,稳定性高。
-
而 npm 默认从
registry.npmjs.org下载,国内直连速度慢且不稳定。
-
-
完全兼容 NPM 的命令:
-
cnpm 完全兼容 npm 的命令(如
cnpm install、cnpm publish),仅需将 npm 替换为 cnpm 即可使用。 -
支持私有源,可通过
cnpm config set registry <url>切换为私有仓库(如企业内网源)。
-
-
镜像同步频率高:
-
实时同步:淘宝镜像每隔 10 分钟与 NPM 官方仓库同步一次,基本覆盖最新版本。
-
容灾备份:镜像服务器分布多地,避免单点故障。
-
配置:
-
全局配置:建议全局配置淘宝镜像,提升日常开发效率
npm config set registry https://registry.npmmirror.com -
临时需求:若需从官方源安装个别包,可通过参数临时指定
npm install some-package --registry=https://registry.npmjs.org
关键解读
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
相关文章:
npm、pnpm、cnpm、yarn、npx之间的区别
文章目录 区别特点pnpmyarncnpm 关键解读如何选择代码示例安装依赖运行命令 区别 特性npmyarnpnpmcnpmnpx核心定位Node.js 默认包管理增强稳定性与性能高效存储与严格隔离国内镜像加速工具临时执行包命令依赖存储方式扁平化 node_modules扁平化 lock 文件全局硬链接 符号链接…...
指令微调 (Instruction Tuning) 与 Prompt 工程
引言 预训练语言模型 (PLMs) 在通用语言能力方面展现出强大的潜力。然而,如何有效地引导 PLMs 遵循人类指令, 并输出符合人类意图的响应, 成为释放 PLMs 价值的关键挑战。 指令微调 (Instruction Tuning) 和 Prompt 工程 (Prompt Engineerin…...
Linux学习(十五)(故障排除(ICMP,Ping,Traceroute,网络统计,数据包分析))
故障排除是任何 Linux 用户或管理员的基本技能。这涉及识别和解决 Linux 系统中的问题。这些问题的范围包括常见的系统错误、硬件或软件问题、网络连接问题以及系统资源的管理。Linux 中的故障排除过程通常涉及使用命令行工具、检查系统和应用程序日志文件、了解系统进程&#…...
【大模型】硅基流动对接DeepSeek使用详解
目录 一、前言 二、硅基流动介绍 2.1 硅基流动平台介绍 2.1.1 平台是做什么的 2.2 主要特点与功能 2.2.1 适用场景 三、硅基流动快速使用 3.1 账户注册 3.2 token获取 3.2.1 获取token技巧 四、Cherry-Studio对接DeepSeek 4.1 获取 Cherry-Studio 4.2 Cherry-Stud…...
UE5.5 Niagara 发射器粒子更新模块
Particle State (粒子状态)模块 Particle State 主要用于控制粒子的生存状态,包括死亡、消失、响应事件等。 Particle State Kill Particles When Lifetime Has Elapsed 当粒子的生命周期结束时,销毁这些粒子。 Lifetime &…...
机器学习(吴恩达)
一, 机器学习 机器学习定义: 计算机能够在没有明确的编程情况下学习 特征: 特征是描述样本的属性或变量,是模型用来学习和预测的基础。如: 房屋面积, 地理位置 标签: 监督学习中需要预测的目标变量,是模型的输出目标。如: 房屋价格 样本: 如: {面积100㎡…...
JavaWeb-servlet6中request和response的使用
HttpServletRequest HttpServletRequest 继承自 ServletRequest。客户端浏览器发出的请求被封装成为一个 HttpServletRequest对象。 对象包含了客户端请求信息包括请求的地址,请求的参数,提交的数据,上传的文件客户端的ip甚至客户端操作系统…...
Django与视图
我叫补三补四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲视图 在web应用的MVC结构中,视图一般包含模板和表单,用来给浏览器生成响应。在实际处理过程当中,视图会根据请求的参数从数据源当中找到数据…...
RabbitMQ从入门到实战-2
文章目录 Java客户端快速入门WorkQueue(多消费)能者多劳配置 交换机fanout交换机案例 Direct交换机Topic交互机 声明队列和交互机(IDEA中)基于Bean声明队列和交换机基于注解声明(推) 消息转换器配置Json消息转换器 业务改造&#…...
【每日八股】计算机网络篇(四):HTTP
目录 HTTP 与 HTTPS 的区别?HTTPS 加密与认证的过程?ClientHelloServerHello客户端回应服务端回应 HTTPS 一定安全可靠吗?HTTPS 状态码的含义?HTTP 缓存有哪些实现方式?HTTP 1.0、HTTP 1.1、HTTP 2.0 和 HTTP 3.0 的区…...
Mac 配置 Maven JDK
不使用 Homebrew,创建指定版本 JDK 1、官网下载指定版本并安装……省略 2、vi ~/.zshrc 同时要检查 bash_profile 是否存在。 if [ -f ~/.bash_profile ] ; thensource ~/.bash_profile fiJAVA_HOME_11/Library/Java/JavaVirtualMachines/jdk-11.0.1…...
测试大语言模型在嵌入式设备部署的可能性-ollama本地部署测试
前言 当今各种大语言模型百花齐放,为了方便使用者更加自由的使用大模型,将大模型变成如同棒球棍一样每个人都能用,并且顺手方便的工具,本地私有化具有重要意义。 本次测试使用ollama完成模型下载,过程简单快捷。 1、进…...
Ubuntu通过Ollama部署deepseek和千问
一、准备文件 本地服务器是Ubuntu20.04,输入命令uname -a即可查看 部署方式有多样,点击Ollama访问官网 可复制命令直接粘贴下载,但是过程比较慢,所以我推荐下面这种方式 从githubReleases ollama/ollama GitHub上下载ollama的…...
责任链模式的C++实现示例
核心思想 责任链模式是一种行为设计模式,允许多个对象都有机会处理请求,从而避免请求的发送者与接收者之间的耦合。请求沿着处理链传递,直到某个对象处理它为止。 解决的问题 解耦请求发送者与处理者:请求的发送者无需知道具…...
微服务新手入门
一、微服务概念 微服务是一种软件架构风格,ta是以专注于单一职责的很多小型项目为基础,组合出复杂的大型应用。 微服务 - 服务拆分 - 远程调用 - 服务治理 - 请求路由 - 身份认证 - 配置管理 - 服务保护 - 分布式事务 - 异步通信 - 消息可靠性 - 延迟消…...
第十一届蓝桥杯单片机国赛
什么?4T模拟赛和省赛做起来轻轻松松?不妨来挑战一下第十一届国赛,这一届的国赛居然没考超声波、串口通信!只要你正确地理解了题目的意思,规避出题人挖的坑,拿个国一轻轻松松。 附件:第十一届蓝桥…...
【eNSP实战】MSTP与VRRP配合使用
拓扑图 要求: PC1划分在vlan10;PC2划分在vlan20;主机IP和网关如图所示,这里不做展示LSW1配置vlan10的根交换机,vlan20的备根交换机;LSW2配置vlan20的根交换机,vlan10的备根交换机LSW1配置vlan…...
【每日学点HarmonyOS Next知识】tab拦截、组件方法做参数、自定义组件链式调用、多次观察者监听、横竖屏切换
1、HarmonyOS Tab组件里的tabBar点击如何拦截,根据情况判断是否允许切换tab? Tab组件里的tabBar点击如何拦截,根据情况判断是否允许切换tab 暂时没有tabBar点击拦截功能实现,可以使用TabsController自定义页签以及并在其中添加事…...
UVC摄像头命令推流,推到rv1126里面去
ffmpeg命令查询UVC设备 .\ffmpeg.exe -list_devices true -f dshow -i dummy 上图是查询UVC设备的效果图,画红框的部分是UVC设备的设备名称"USB2.0 PC CAMERA"和设备号 "device_pnp_\\?\usb#vid_1908&pid_2310&mi_00#8&39abfe5&0&a…...
2025年主流原型工具测评:墨刀、Axure、Figma、Sketch
2025年主流原型工具测评:墨刀、Axure、Figma、Sketch 要说2025年国内产品经理使用的主流原型设计工具,当然是墨刀、Axure、Figma和Sketch了,但是很多刚入行的产品经理不了解自己适合哪些工具,本文将从核心优势、局限短板、协作能…...
es-索引详解
在 Elasticsearch 中,**索引(Index)**是核心概念之一,类似于关系型数据库中的“表”。索引用于存储、组织和检索文档(Document)。以下是关于 Elasticsearch 索引的详细解析: 1. 索引的基本概念 …...
SAP接口方式之HTTP请求发布Restful服务
SAP restful http 接口集中管理发布(SICF) 项目上有很多restful接口的需求,其中涉及到多个外围系统,就想着如何通过只发布一个服务,而不用通过Webservice,也不通过RFC方式,让个外围系统传入不同的报文,来决…...
Spark-TTS:基于大模型的文本语音合成工具
GitHub:https://github.com/SparkAudio/Spark-TTS Spark-TTS是一个先进的文本到语音系统,它利用大型语言模型(LLM)的强大功能进行高度准确和自然的语音合成;旨在高效、灵活、强大地用于研究和生产用途。 一、介绍 Sp…...
Netty基础—3.基础网络协议一
大纲 1.网络基础的相关问题总结 2.七层模型和四层模型 3.物理层(网线 光缆 01电信号) 4.数据链路层(以太网协议 网卡mac地址) 5.网络层(IP协议 子网划分 路由器) 6.传输层(TCP和UDP协议 Socket 端口) 7.应用层(HTTP协议 SMTP协议) 8.浏览器请求一个域名会发生什…...
【mysql】centOS7安装mysql详细操作步骤!
【mysql】centOS7安装mysql详细操作步骤!—通过tar包方式 需要 root 权限,使用 root 用户进行命令操作。 1. 查看 CentOS 版本 cat /etc/redhat-release2. 安装rpm包,以8为例 打开 MySQL 官方 yum 仓库网站,获取与当前 CentOS …...
大白话 Vue 中的keep - alive组件,它的作用是什么?在什么场景下使用?
大白话 Vue 中的keep - alive组件,它的作用是什么?在什么场景下使用? 什么是 keep-alive 组件 在 Vue 里,keep-alive 是一个内置组件,它就像是一个“保存盒”,能把组件实例保存起来,而不是每次…...
当量子计算遇上互联网安全:挑战与革新之路
当量子计算遇上互联网安全:挑战与革新之路 量子计算,一个被誉为下一次科技革命的前沿技术,正在以惊人的速度发展。这项技术以其超越经典计算机的计算能力,为科学、医药和物流等领域带来了颠覆性变革。然而,对于互联网…...
Unity 封装一个依赖于MonoBehaviour的计时器(上) 基本功能
灵感来自下面这本书的协程部分,因此我就自己尝试写了一个 我的新书Unity3D游戏开发(第3版) | 雨松MOMO程序研究院 如果你不知道什么是协程:unity保姆级教程之协同程序_unity协同-CSDN博客 一句话概括:协程就是单线程的异步操作,其作用于Unity的主线程 1…...
使用Nodejs基于DeepSeek加chromadb实现RAG检索增强生成 本地知识库
定义 检索增强生成(RAG)的基本定义 检索增强生成(Retrieval-Augmented Generation,简称RAG)是一种结合了信息检索技术与语言生成模型的人工智能技术。RAG通过从外部知识库中检索相关信息,并将其作为提示&…...
笔试刷题专题(一)
文章目录 最小花费爬楼梯(动态规划)题解代码 数组中两个字符串的最小距离(贪心(dp))题解代码 点击消除题解代码 最小花费爬楼梯(动态规划) 题目链接 题解 1. 状态表示࿱…...
