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

在这里插入图片描述

在 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   //更新全局包

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电源模块效率的正确测试方法

电源效率是评价电源性能的重要指标,它直接关系到设备的稳定性和能源的利用效率。因此,对电源进行效率测试显得尤为重要。电源在工作过程中,会有部分能量损耗,因此,电源效率的高低,不仅影响着设备的性能&…

VMware虚拟机没有网,无法设置网络为桥接状态

今天需要使用Ubuntu18但现有虚拟机是Ubuntu20,由于硬盘空间不够大,所以删除了原来的虚拟机并重新搭建Ubuntu18的环境,然后发现虚拟机没有网络,而我之前的虚拟机这一切都是正常的。 在网络设置里勾选的是桥接模式但无法联网&#x…

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

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

面试加分项:精通Java高并发下的锁优化策略

1. 问题背景与挑战 1.1 并发编程中的挑战 在现代软件开发中,高并发已成为衡量系统质量的一项关键因素,特别是对于那些需要同时处理数以万计甚至百万级用户请求的服务。并发编程的挑战在于如何有效地同步多个线程,确保数据的一致性和系统的稳…

【csv-parse】使用parse方法的时候来转换为csv字符串时,会导致输出有乱码

😁 作者简介:一名大四的学生,致力学习前端开发技术 ⭐️个人主页:夜宵饽饽的主页 ❔ 系列专栏:前端bug记录 👐学习格言:成功不是终点,失败也并非末日,最重要的是继续前进…

针对实拍场景的虚拟试衣模型IDM-VTON:高保真和细节保留的虚拟试穿算法,真实环境效果领先

前言 虚拟试衣是一种将人物图像与服装图像合成,生成人物穿戴目标服装的图像技术。相比传统的GAN方法,基于扩散模型的虚拟试衣方法能够生成更加自然逼真的图像。然而,现有的扩散模型在保留服装细节方面仍存在局限性。 为了解决这一问题&…

Nodejs 第七十一章(libuv)

libuv 在Node.js中,libuv是作为其事件循环和异步I/O的核心组件而存在的。Node.js是构建在libuv之上的,它利用libuv来处理底层的异步操作,如文件I/O、网络通信和定时器等。 libuv在Node.js中扮演了以下几个重要角色: 事件循环&a…

一个panic问题引起对percpu变量的思考

1 问题引入 最近在分析一个panic问题时&#xff0c;发现panic现场无法与log对应起来。 先贴log: <1>[ 180.089084] Unable to handle kernel NULL pointer dereference at virtual address 00000001 <1>[ 180.099551] pgd 8bbde651 <1>[ 180.107775] …

JavaScript进阶——05-迭代器和生成器【万字长文,感谢支持】

迭代器 概念 迭代器&#xff08;Iterator&#xff09;是 JavaScript 中一种特殊的对象&#xff0c;它提供了一种统一的、通用的方式遍历个各种不同类型的数据结构。可以遍历的数据结构包括&#xff1a;数组、字符串、Set、Map 等可迭代对象。我们也可以自定义实现迭代器&…

Python GUI开发- Qt Designer环境搭建

前言 Qt Designer是PyQt5 程序UI界面的实现工具&#xff0c;使用 Qt Designer 可以拖拽、点击完成GUI界面设计&#xff0c;并且设计完成的 .ui 程序可以转换成 .py 文件供 python 程序调用 环境准备 使用pip安装 pip install pyqt5-toolsQt Designer 环境搭建 在pip安装包…

AI办公自动化:用kimi批量把word转换成txt文本

在Kimichat中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个Python脚本编写的任务&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;F:\aword 读取里面docx格式的word文档&#xff0c; 提取word文档中的第一行文字作为txt文本文档的标题…

(done) NLP+HMM 协作,还有维特比算法

参考视频&#xff1a;https://www.bilibili.com/video/BV1aP4y147gA/?p2&spm_id_frompageDriver&vd_source7a1a0bc74158c6993c7355c5490fc600 &#xff08;这实际上是 “序列标注任务”&#xff09; HMM 的训练和预测如下图 训练过程&#xff1a;我们首先先给出一个语…

HSP_06章-1_Python_数据容器

文章目录 P76 数据容器1. 概述2. 分类 P77 列表ListP77-78 列表List的注意事项和使用细节P80 列表List的常用方法一览1. 列表生成式 P80_82 元组Tuple1. 元组的使用细节和注意事项 P83 元组的常用操作 P76 数据容器 1. 概述 1、数据容器是一种数据类型&#xff0c;有些地方也…

机器学习笔记 PostgresML教程:使用SQL进行机器学习

机器学习的基本做法是将数据转移到模型的环境中进行训练。由于今天的数据库比机器学习模型大好多个数量级,所以PostgresML的思路是,如果我们将模型引入数据集不是会容易得多吗? PostgresML 是一个建立在流行的 PostgreSQL 数据库之上的综合机器学习平台。它引入了一种称为“…

股指期货的交割日是哪一天?

股指期货的交割日&#xff0c;就好比是期货合约的“期末考试”。每个月的第三周的周五&#xff0c;就是股指期货的交割日。在这一天&#xff0c;如果你持有的期货合约还没有卖出&#xff08;平仓&#xff09;&#xff0c;那么就会按照一个特定的价格&#xff08;结算价&#xf…

学习MySQL(三):数据类型约束条件

数据类型 字符串&#xff1a;char(num) 与 varchar(num) 延申面试问题&#xff1a;char与varchar有什么区别&#xff1f; 区别1&#xff1a;定长与变长 char 固定长度&#xff0c;例如定义了char(8)&#xff0c;则这一列存储的内容长度都为8&#xff0c;不足8位则会用空格补…

二分答案(区间范围)

D. Jumping Through Segments 输入数据 4 5 1 5 3 4 5 6 8 10 0 1 3 0 2 0 1 0 3 3 3 8 10 18 6 11 4 10 20 0 5 15 17 2 2 输出范围 7 0 5 13#include<bits/stdc.h> #define int long long using namespace std; typedef pair<char,int>PII; const int N2e510;…

Java线程生命周期:Java线程生命周期全景解读

1. 线程生命周期概述&#xff1a;不仅仅是状态转换 在多线程编程中&#xff0c;理解线程的生命周期对于编写有效、高效的代码至关重要。线程生命周期通常描述了线程从创建到死亡的一系列状态变化过程&#xff0c;但其实不仅仅局限于这些状态的简单转换。线程生命周期的理解应该…

如何在云电脑实现虚拟应用—数据分层(应用分层)技术简介

如何在云电脑实现虚拟应用—数据分层&#xff08;应用分层&#xff09;技术简介 近几年虚拟化市场实现了非常大的发展&#xff0c;桌面虚拟化在企业中应用越来越广泛&#xff0c;其拥有的如下优点得到大量企业的青睐&#xff1a; 数据安全不落地。在虚拟化环境下面数据保存在…

网络安全快速入门(十)MySQL拓展操作

10.1.0前言 前面我们已经对用户操作以及库&#xff0c;表操作有了基础的认识&#xff0c;接下来我们来在之前已经学过的一些操作进行进一步拓展&#xff0c;本章我们主要了解以下几个知识点&#xff1a; 数据库设计方法视图存储过程事务 我们开始本章的内容吧 10.2 数据库设计方…