npm、pnpm、cnpm、yarn、npx之间的区别

news2025/3/13 18:39:37

文章目录

  • 区别
  • 特点
    • pnpm
    • yarn
    • cnpm
  • 关键解读
  • 如何选择
  • 代码示例
    • 安装依赖
    • 运行命令


区别

特性npmyarnpnpmcnpmnpx
核心定位Node.js 默认包管理增强稳定性与性能高效存储与严格隔离国内镜像加速工具临时执行包命令
依赖存储方式扁平化 node_modules扁平化 + lock 文件全局硬链接 + 符号链接同 npm不适用
安装速度较慢较快(并行下载)最快(复用缓存)快(国内 CDN)不适用
磁盘占用极低(共享存储)
依赖隔离性弱(依赖提升)中(lock 文件控制)强(符号链接隔离)同 npm不适用
Monorepo 支持基础(workspaces)强大(workspaces)原生支持不支持不适用
锁文件package-lock.jsonyarn.lockpnpm-lock.yaml同 npm
安全性极高低(镜像源风险)
国内网络优化有(淘宝镜像)
典型命令npm installyarn addpnpm addcnpm installnpx create-app
适用场景简单项目、兼容性需求中大型项目、稳定性大型项目、Monorepo国内网络环境加速临时执行 CLI 工具

特点

pnpm

pnpm 使用 硬链接(Hard Link)和符号链接(Symlink) 来管理依赖文件。所有依赖包的实际文件存储在全局的单一内容寻址存储中(类似 Git),不同项目共享相同文件。

优势:

  1. 节省磁盘空间:

    • 所有依赖的每个版本仅保存一份实体文件。(例如,10 个项目都依赖 lodash@4.17.21,磁盘上只保留一份文件。)

    • 多个项目共用同一依赖的同一版本时,无需重复下载。

  2. 安装速度快:

    • 新项目安装依赖时,若全局已有该包,直接创建硬链接,无需重新下载。
  3. 非扁平化结构:

    • pnpm 的 node_modules 结构是非扁平化的,每个依赖只能访问其显式声明的依赖,避免了“幽灵依赖”(Phantom Dependencies)问题。

    • 例如,你的项目依赖 A,而 A 依赖 B。在 NPM 的扁平化结构中,你的代码可能直接引用 B(即使未声明依赖 B),导致潜在风险;而 PNPM 会严格限制这种访问。

.

yarn

yarn详细入门教程

yarn 在速度、稳定性和 Monorepo 支持上优于 NPM,适合对依赖管理要求严格的场景。若项目已使用 NPM,可权衡迁移成本;若为新项目,Yarn 是更现代的选择(尤其是 Yarn 2+)。

优势:

  1. 并行下载:

    • 可以并行下载依赖包,显著提升安装速度(尤其在依赖数量多时)。

    • 早期 npm 安装依赖时是顺序下载且无缓存复用,速度较慢(NPM 5+ 已改进,但 Yarn 仍有一定优势)。

  2. 本地缓存机制:

    所有下载过的依赖会缓存在本地,后续安装直接从缓存读取,减少网络请求。

  3. lock 文件:

    • yarn 默认生成 yarn.lock 文件,严格锁定依赖树中每个包的具体版本和哈希值,确保不同环境下安装的依赖完全一致,防止恶意代码注入。

    • 对比:早期 npm 的 package-lock.json 在部分场景下可能因版本范围定义不严格导致依赖版本漂移(NPM 5+ 已改进,但 Yarn 的锁定机制更早成熟)。

  4. 离线模式:
    yarn 优先从本地缓存安装依赖,即使无网络连接也可完成安装(需提前缓存过依赖)。

.

cnpm

cnpm 是淘宝镜像提供的工具,主要针对国内用户,解决npm在国内下载速度慢的问题。它的核心优势应该在于镜像源的速度和稳定性,以及可能的并行安装提升速度。

cnpm 默认使用淘宝镜像源(https://registry.npmmirror.com),所有依赖包会从国内服务器下载,避开国际网络延迟。

优势:

  1. 下载速度极快:

    • 国内用户安装依赖的速度可提升 5-10 倍(尤其对大体积包如 node-sass、electron 等效果显著)。

    • 避免因国际网络波动导致的安装失败,稳定性高。

    • 而 npm 默认从 registry.npmjs.org 下载,国内直连速度慢且不稳定。

  2. 完全兼容 NPM 的命令:

    • cnpm 完全兼容 npm 的命令(如 cnpm installcnpm publish),仅需将 npm 替换为 cnpm 即可使用。

    • 支持私有源,可通过 cnpm config set registry <url> 切换为私有仓库(如企业内网源)。

  3. 镜像同步频率高:

    • 实时同步:淘宝镜像每隔 10 分钟与 NPM 官方仓库同步一次,基本覆盖最新版本。

    • 容灾备份:镜像服务器分布多地,避免单点故障。

配置:

  1. 全局配置:建议全局配置淘宝镜像,提升日常开发效率
    npm config set registry https://registry.npmmirror.com

  2. 临时需求:若需从官方源安装个别包,可通过参数临时指定
    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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2314440.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

指令微调 (Instruction Tuning) 与 Prompt 工程

引言 预训练语言模型 (PLMs) 在通用语言能力方面展现出强大的潜力。然而&#xff0c;如何有效地引导 PLMs 遵循人类指令&#xff0c; 并输出符合人类意图的响应&#xff0c; 成为释放 PLMs 价值的关键挑战。 指令微调 (Instruction Tuning) 和 Prompt 工程 (Prompt Engineerin…

UE5.5 Niagara 发射器粒子更新模块

Particle State &#xff08;粒子状态&#xff09;模块 Particle State 主要用于控制粒子的生存状态&#xff0c;包括死亡、消失、响应事件等。 Particle State Kill Particles When Lifetime Has Elapsed 当粒子的生命周期结束时&#xff0c;销毁这些粒子。 Lifetime &…

机器学习(吴恩达)

一, 机器学习 机器学习定义: 计算机能够在没有明确的编程情况下学习 特征: 特征是描述样本的属性或变量&#xff0c;是模型用来学习和预测的基础。如: 房屋面积, 地理位置 标签: 监督学习中需要预测的目标变量&#xff0c;是模型的输出目标。如: 房屋价格 样本: 如: {面积100㎡…

Django与视图

我叫补三补四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲视图 在web应用的MVC结构中&#xff0c;视图一般包含模板和表单&#xff0c;用来给浏览器生成响应。在实际处理过程当中&#xff0c;视图会根据请求的参数从数据源当中找到数据&#xf…

RabbitMQ从入门到实战-2

文章目录 Java客户端快速入门WorkQueue(多消费)能者多劳配置 交换机fanout交换机案例 Direct交换机Topic交互机 声明队列和交互机&#xff08;IDEA中&#xff09;基于Bean声明队列和交换机基于注解声明&#xff08;推&#xff09; 消息转换器配置Json消息转换器 业务改造&#…

Mac 配置 Maven JDK

不使用 Homebrew&#xff0c;创建指定版本 JDK 1、官网下载指定版本并安装……省略 2、vi &#xff5e;/.zshrc 同时要检查 bash_profile 是否存在。 if [ -f ~/.bash_profile ] ; thensource ~/.bash_profile fiJAVA_HOME_11/Library/Java/JavaVirtualMachines/jdk-11.0.1…

测试大语言模型在嵌入式设备部署的可能性-ollama本地部署测试

前言 当今各种大语言模型百花齐放&#xff0c;为了方便使用者更加自由的使用大模型&#xff0c;将大模型变成如同棒球棍一样每个人都能用&#xff0c;并且顺手方便的工具&#xff0c;本地私有化具有重要意义。 本次测试使用ollama完成模型下载&#xff0c;过程简单快捷。 1、进…

Ubuntu通过Ollama部署deepseek和千问

一、准备文件 本地服务器是Ubuntu20.04&#xff0c;输入命令uname -a即可查看 部署方式有多样&#xff0c;点击Ollama访问官网 可复制命令直接粘贴下载&#xff0c;但是过程比较慢&#xff0c;所以我推荐下面这种方式 从githubReleases ollama/ollama GitHub上下载ollama的…

第十一届蓝桥杯单片机国赛

什么&#xff1f;4T模拟赛和省赛做起来轻轻松松&#xff1f;不妨来挑战一下第十一届国赛&#xff0c;这一届的国赛居然没考超声波、串口通信&#xff01;只要你正确地理解了题目的意思&#xff0c;规避出题人挖的坑&#xff0c;拿个国一轻轻松松。 附件&#xff1a;第十一届蓝桥…

【eNSP实战】MSTP与VRRP配合使用

拓扑图 要求&#xff1a; PC1划分在vlan10&#xff1b;PC2划分在vlan20&#xff1b;主机IP和网关如图所示&#xff0c;这里不做展示LSW1配置vlan10的根交换机&#xff0c;vlan20的备根交换机&#xff1b;LSW2配置vlan20的根交换机&#xff0c;vlan10的备根交换机LSW1配置vlan…

UVC摄像头命令推流,推到rv1126里面去

ffmpeg命令查询UVC设备 .\ffmpeg.exe -list_devices true -f dshow -i dummy 上图是查询UVC设备的效果图&#xff0c;画红框的部分是UVC设备的设备名称"USB2.0 PC CAMERA"和设备号 "device_pnp_\\?\usb#vid_1908&pid_2310&mi_00#8&39abfe5&0&a…

2025年主流原型工具测评:墨刀、Axure、Figma、Sketch

2025年主流原型工具测评&#xff1a;墨刀、Axure、Figma、Sketch 要说2025年国内产品经理使用的主流原型设计工具&#xff0c;当然是墨刀、Axure、Figma和Sketch了&#xff0c;但是很多刚入行的产品经理不了解自己适合哪些工具&#xff0c;本文将从核心优势、局限短板、协作能…

es-索引详解

在 Elasticsearch 中&#xff0c;**索引&#xff08;Index&#xff09;**是核心概念之一&#xff0c;类似于关系型数据库中的“表”。索引用于存储、组织和检索文档&#xff08;Document&#xff09;。以下是关于 Elasticsearch 索引的详细解析&#xff1a; 1. 索引的基本概念 …

SAP接口方式之HTTP请求发布Restful服务

SAP restful http 接口集中管理发布(SICF) 项目上有很多restful接口的需求&#xff0c;其中涉及到多个外围系统&#xff0c;就想着如何通过只发布一个服务&#xff0c;而不用通过Webservice&#xff0c;也不通过RFC方式&#xff0c;让个外围系统传入不同的报文&#xff0c;来决…

Spark-TTS:基于大模型的文本语音合成工具

GitHub&#xff1a;https://github.com/SparkAudio/Spark-TTS Spark-TTS是一个先进的文本到语音系统&#xff0c;它利用大型语言模型&#xff08;LLM&#xff09;的强大功能进行高度准确和自然的语音合成&#xff1b;旨在高效、灵活、强大地用于研究和生产用途。 一、介绍 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详细操作步骤&#xff01;—通过tar包方式 需要 root 权限&#xff0c;使用 root 用户进行命令操作。 1. 查看 CentOS 版本 cat /etc/redhat-release2. 安装rpm包&#xff0c;以8为例 打开 MySQL 官方 yum 仓库网站&#xff0c;获取与当前 CentOS …

使用Nodejs基于DeepSeek加chromadb实现RAG检索增强生成 本地知识库

定义 检索增强生成&#xff08;RAG&#xff09;的基本定义 检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;简称RAG&#xff09;是一种结合了信息检索技术与语言生成模型的人工智能技术。RAG通过从外部知识库中检索相关信息&#xff0c;并将其作为提示&…

笔试刷题专题(一)

文章目录 最小花费爬楼梯&#xff08;动态规划&#xff09;题解代码 数组中两个字符串的最小距离&#xff08;贪心&#xff08;dp&#xff09;&#xff09;题解代码 点击消除题解代码 最小花费爬楼梯&#xff08;动态规划&#xff09; 题目链接 题解 1. 状态表示&#xff1…

LeetCode977有序数组的平方

思路①&#xff1a;先平方&#xff0c;后快排&#xff0c;输出&#xff08;基准元素&#xff0c;左小右大&#xff09; 时间复杂度&#xff1a;O&#xff08;nlogn&#xff09; 思路②&#xff1a;双指针左右开弓&#xff0c;首先原数组已经是按照非递减顺序排序&#xff0c;那…