深入理解 npm、cnpm、npx、yarn 和 pnpm:JavaScript 包管理器的对比

news2024/12/26 11:57:21

在这里插入图片描述

在 JavaScript 的世界中,包管理器是一个重要的工具,它帮助我们管理、安装和升级项目的依赖。在这篇文章中,我们将深入探讨三个最流行的 JavaScript 包管理器:npm、yarn 和 pnpm。

npm(Node Package Manager)

npm 是 Node.js 的默认包管理器,它随着 Node.js 一起发布。npm 有一个庞大的包注册中心,其中包含了数十万个可用的包。npm 使用 package-lock.json 文件来锁定依赖的具体版本,这有助于确保在不同的环境中,项目的依赖关系始终保持一致。

优点

  1. 社区支持:npm 是 Node.js 的默认包管理器,拥有庞大的社区支持和丰富的可用包。开发者可以轻松地找到所需的库和工具。
  2. 兼容性:npm 与 Node.js 版本紧密相关,因此在兼容性方面表现良好。
  3. 易于使用:npm 的命令简单易懂,对于初学者来说非常友好。

缺点

  1. 嵌套依赖:npm 使用嵌套的依赖结构,可能导致大量的重复包安装,占用更多的磁盘空间。这种结构可能会导致“依赖地狱”,使得项目难以维护。
  2. 安装速度:npm 的安装速度相对较慢,尤其是在处理大型项目时。这可能会影响开发者的生产力。
  3. 不稳定的锁定文件:package-lock.json 文件会在执行 npm 命令时自动更新,可能导致依赖关系不稳定。

npx

npx 是什么

npx是一个由Node.js官方提供的用于快速执行npm包中的可执行文件的工具。它可以帮助我们在不全局安装某些包的情况下,直接运行该包提供的命令行工具。npx 在执行时,如果发现本地项目依赖项中不存在的包,则会自行安装远程 npm 库中的包至 npm 缓存当中,运行完成后会删除

使用npx时,可以在命令行中输入要执行的包名加上其参数,例如:

npx create-react-app my-app

以上命令会在本地下载并运行create-react-app包中的可执行文件,创建一个名为my-app的React应用程序。

npx 会把远端的包下载到本地吗?

npx 不会像 npm 或 yarn 一样将包下载到本地的 node_modules 目录中。相反,它会在执行命令时,在本地缓存中寻找并下载包,然后执行该包中的命令。这样可以避免在开发过程中在全局安装大量的包,同时也可以确保使用的是最新版本的包。

npx 执行完成之后, 下载的包是否会被删除?

是的,npx会在执行完命令后删除下载的包。这是因为npx会在执行命令之前,将需要执行的包下载到一个临时目录中,并在执行完毕后删除该目录。这样可以避免在本地留下不必要的依赖包。如果需要保留依赖包,可以使用–no-cleanup选项来禁止删除下载的包。

cnpm

cnpm 是 “China Node Package Manager” 的缩写,是一个完全兼容 npm 的命令行工具,为中国大陆地区的开发者提供了一些额外的功能。

由于网络原因,中国大陆地区的开发者在直接使用 npm 安装包时可能会遇到速度慢甚至无法安装的问题。为了解决这个问题,淘宝团队创建了一个 npm 的镜像源 - 淘宝 NPM 镜像,而 cnpm 就是这个镜像源的命令行工具。

cnpm 的主要特性有:

  1. 快速安装cnpm 使用淘宝 NPM 镜像,可以快速地从镜像源下载和安装包,显著提高了在中国大陆地区的安装速度。

  2. 兼容 npmcnpm 完全兼容 npm 的所有功能,你可以像使用 npm 一样使用 cnpm

  3. 同步 npmcnpm 提供了一个同步命令,可以将 npm 的包同步到淘宝 NPM 镜像,确保镜像源的包总是最新的。

要安装 cnpm,你可以使用 npm:

npm install -g cnpm --registry=https://registry.npm.taobao.org

然后,你就可以像使用 npm 一样使用 cnpm 了:

cnpm install [package-name]

总的来说,cnpm 是一个为中国大陆地区的开发者提供的 npm 的替代品,它提供了快速的安装速度和 npm 的完全兼容性。

yarn

yarn 是 Facebook 开发的一个 npm 的替代品,它致力于解决 npm 的一些问题。yarn 使用 yarn.lock 文件来锁定依赖的具体版本,这与 npm 非常相似。

优点

  1. 扁平化依赖结构:yarn 使用扁平化的依赖结构,避免了重复包的安装,减少了磁盘空间占用。这有助于提高项目的可维护性。
  2. 安装速度:Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快,尤其是在处理大型项目时。这有助于提高开发者的生产力。
  3. 离线模式:yarn 提供了离线模式,可以在没有互联网连接的情况下安装之前已经缓存过的包。这在有限的网络环境下非常有用。
  4. 安全:在执行代码之前,Yarn 会通过算法校验每个安装包的完整性。
  5. 更好的用户体验:与 npm 相比,yarn 的命令行界面(CLI)提供了更好的用户体验,包括清晰的输出和进度条。

缺点

  1. 社区支持:虽然 yarn 的社区支持也很好,但相较于 npm,它的社区和可用包相对较少。
  2. 需要额外安装:yarn 不是 Node.js 的内置包管理器,需要单独安装。

可以通过 npm 安装 yarn:

npm install -g yarn

使用

安装完成后,可以使用 yarn 命令。以下是一些常用的 yarn 命令:

  1. 初始化一个新项目:
yarn init
  1. 安装项目依赖:
yarn install
  1. 添加一个新的依赖:
yarn add [package-name]
  1. 移除一个依赖:
yarn remove [package-name]
  1. 更新一个依赖:
yarn upgrade [package-name]
  1. 运行一个脚本:
yarn run [script-name]

yarn 和 npm 命令对比

NPMYarn说明
npm inityarn init初始化某个项目
npm install/linkyarn install/link默认安装依赖
npm install taco --saveyarn add taco安装某个依赖并默认保存到package
npm uninstall taco --saveyarn remove taco移除某个依赖
npm install taco --save-devyarn add taco --dev安装某个开发时的依赖
npm update taco --saveyarn upgrade taco更新某个依赖项目
npm install taco --globalyarn global add taco安装某个全局依赖项目
npm publish/login/logoutyarn publish/login/logout发布/登录/退出
npm run/testyarn run/test运行某个命令

pnpm

pnpm 是一个相对较新的包管理器,它的主要目标是提高性能和减少磁盘空间占用。pnpm 使用 pnpm-lock.yaml 文件来锁定依赖的具体版本,这与 npm 和 yarn 非常相似。

优点

  1. 磁盘空间优化:pnpm 使用了一种称为“symlink”的技术,将所有依赖项存储在一个共享的位置,而不是为每个项目单独安装。这可以大大减少磁盘空间的占用。
  2. 安装速度:pnpm 的安装速度相对较快,尤其是在处理大型项目时。这有助于提高开发者的生产力。
  3. 严格的依赖管理:pnpm 严格遵循依赖关系,这有助于避免在项目中意外地引入未在 package.json 中声明的依赖项。这有助于提高项目的可维护性。

缺点

  1. 社区支持:pnpm 是一个相对较新的包管理器,其社区支持和可用包相对较少。
  2. 兼容性问题:由于 pnpm 使用 symlink 技术,可能会导致某些工具或库在处理依赖关系时出现兼容性问题。

安装

全局安装

npm install pnpm -g

设置源

//查看源
pnpm config get registry 
//切换淘宝源
pnpm config set registry https://registry.npmmirror.com/

使用

pnpm install 包  // 
pnpm i 包
pnpm add 包    // -S  默认写入dependencies
pnpm add -D    // -D devDependencies
pnpm add -g    // 全局安装

移除

pnpm remove 包                            //移除包
pnpm remove 包 --global                   //移除全局包

更新

pnpm up                //更新所有依赖项
pnpm upgrade 包        //更新包
pnpm upgrade 包 --global   //更新全局包

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

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

相关文章

未来IT行业的模块化、学习与跨界融合

随着技术的快速发展,IT行业已成为推动全球经济和社会发展的核心动力。从云计算和大数据到人工智能(AI)和物联网,这些创新技术正在彻底改变我们的生活方式和工作模式。而在AI领域,尤其是人工智能生成内容(AI…

怎么识别数学公式?分享简单识别方法

怎么识别数学公式?在学术研究和日常工作中,数学公式无疑是一个常见且重要的元素。然而,手动输入复杂的数学公式往往既耗时又容易出错。幸运的是,随着科技的发展,现在我们有了一些高效的软件工具,可以帮助我…

奥维地图下载高清影像的两种方式!以及ArcGIS、QGIS、GlobalMapper、自编工具下载高清影像的方法推荐!

今天来介绍一下奥维互动地图是如何下载高清影像的,也不是多了不起的功能!有朋友问,加上这个软件确实用的人多。 下载的高清数据在ArcGIS中打开的效果! 开始介绍奥维之前我们也介绍一下我们之前介绍的几个方法,没有优劣…

IP代理网络协议介绍

在IP代理页面上,存在HTTP/HTTPS/Socks5三种协议。它们都是客户端与服务器之间交互的协议。 HTTP HTTP又称之为超文本传输协议,在因特网使用范围广泛。它是一种请求/响应模型,客户端向服务器发送请求,服务器解析请求后对客户端作出…

四信5G全连接工厂一站式解决方案上线,打造可持续发展工业未来

政策背景 2022年9月,为进一步加快“5G工业互联网”新技术新场景新模式向工业生产各领域各环节深度拓展,工信部印发《5G全连接工厂建设指南》,明确提出,推动万家企业开展5G全连接工厂建设,建成1000个分类分级、特色鲜明…

#Docker | Ngrok# 使用Ngrok和Docker进行内网穿透

一、注册 Ngrok官网注册,可以使用gmail或者outlook邮箱, 正常填写后你会收到一封电子邮件,点击邮件中链接即注册成功 二、获取密钥 登录,点击Your Authtoken,最上面copy左边就是你得密钥 三、使用内网穿透启动docker…

C++面向对象程序设计-北京大学-郭炜【课程笔记(九)】

C面向对象程序设计-北京大学-郭炜【课程笔记(九)】 1、输入输出流相关的类1.1、标准输出重定向1.2、标准输入重定向1.3、判断输入流结束1.3.1、强制类型转换符重载 1.4、istream类的成员函数1.4.1、cin.getline()函数 2、流操纵算子控制输出格式2.1、流操…

「51媒体」家居生活发布会,展览展会有哪些媒体邀约资源

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 家居生活类媒体包括多种类型,包括门户网站家居生活消费频道,专业的家居消费生活门户,以及行业媒体,平面媒体,KOL和意见领袖。下…

类人速度超快语音响应!OpenAI推出新旗舰模型GPT-4o,图文音频手机AI搞定

内容概述 虽然没有带来备受期待的人工智能(AI)搜索引擎,但OpenAI在主打产品AI模型上花了更多心思,拓展多模态功能,让用户可以免费玩转文字、图片和语音输入。 美东时间5月13日周一,OpenAI首席技术官Mira …

绝地求生:一穿四教学,绿色玩家也能轻松一穿四

PUBG一穿四速成班开课啦!我这里只做PUBG干货分享,不搬运!不搬运!!不搬运!!! 有很多朋友是否在排位里kd不高,开局不是扎堆roll点就是一直搜东西然后一波就没?这…

《灵摆疗法》PDF完整版阅读

译者序 神奇丶快速又有效的灵摆疗法 2008年当我开始走上自己的灵性道路时就与灵摆结下了不解之缘当时我非常热衷于水晶疗愈所以疯狂地搜集各种不同的矿石学习如何将矿石 和水晶灵摆连结起来做能量疗愈后来在我开设马雅心能量课程时也会教大家如何使用水晶灵摆 …然而这两年来不…

09.Hadoop的安装

Hadoop的安装 1.拖拽安装包上传到/opt/software 2.解压文件到/opt/module [itwisenode2 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/3查看文件 drwxr-xr-x. 2 itwise itwise 4096 9月 12 2019 bin drwxr-xr-x. 3 itwise itwise 4096 9月 12 2019 etc …

企业计算机服务器中了rmallox勒索病毒怎么解密,rmallox勒索病毒解密工具流程

在当今数字化时代,越来越多的企业依赖计算机服务器进行办公开展业务,计算机服务器犹如企业的心脏,能够为企业存储许多重要的核心信息,帮助企业有效的开展各项工作业务,提高企业的生产效果,但网络是一把双刃…

守护长者安全,平安养老险携手福海街道开展防灾减灾活动

在构建和谐社会、倡导人文关怀的当下,平安养老险以高度的社会责任感和深厚的人文情怀,持续关注老年人的健康与安全。在今年“5.12防灾减灾日”来临之际,平安养老险深圳分公司积极响应倡议,于5月10日携手福海街道举办了在福海街道举…

java项目之企业资产管理系统(springboot+vue+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的企业资产管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 管理员功能有个人中心&…

Flutter 3.22 发布,快来看看有什么更新吧?

Flutter 3.22 发布,快来看看有什么更新吧? 本次 Flutter 跟随 Google I/O 发布的版本是 3.22 ,该版本主要还是带来了 Vulkan backend 和 Wasm Native 的落地,另外还有一个重点就是 Dart macros ,但是它更多只是一个预…

Warning logs 2024-05-15

mysql数据库中文模糊查询时出现异常 Error querying database. Cause: java.sql.SQLException: Illegal mix of collations for operation like Select("select f.* from fundDetails f" " where (case when #{keyword} is not null then f.operateTime like c…

AXI GPIO IP核配置详解

AXI GPIO(AXI General-Purpose Input/Output)设计提供了一个通用的输入/输出接口,该接口连接到一个AXI4-Lite接口。AXI GPIO可以被配置为单通道或双通道设备,每个通道的位宽可以独立配置。 端口(即GPIO引脚&#xff0…

鸿蒙ArkUI开发:常用布局【相对布局】

相对布局(RelativeContainer) 相对布局可以让子元素指定兄弟元素或父容器作为锚点,基于锚点做位置布局必须为RelativeContainer及其子元素设置ID,用于指定锚点信息。未设置ID的子元素不会显示RelativeContainer ID为“__containe…

【转载】【亲测可用】Ubuntu18.04安装VTK-8.2.0

这篇文章转载大部分都参考自下面的链接,注意cmake的版本,如果版本不对是编译失败的 https://blog.csdn.net/qq_42257666/article/details/124574029?ops_request_misc%257B%2522request%255Fid%2522%253A%2522171566768016800182751339%2522%252C%2522…