0

0

了解两个强大的Node包管理器:npm 和 yarn

青灯夜游

青灯夜游

发布时间:2022-08-25 11:00:08

|

2335人浏览过

|

来源于csdn

转载

本篇文章带大家了解一下node.js的两个强大包管理器:npm 和 yarn,希望对大家有所帮助!

了解两个强大的Node包管理器:npm 和 yarn

学习Node的第一步就是要了解node的包管理器Node,对于npm相信大家并不陌生,因为我们常用它去下载一些包资源

但因为npm的资源库(https://www.npmjs.com/)在国外,使用它下载资源的速度比较慢,于是就出现了npm这些第三方yarn以及国内的跟node包管理器仓库同步更新的淘宝镜像(cnpm)

接下来我们就将深入去学习这些内容,让我们开始吧!

Node系列专栏开始更新了,关注博主,订阅专栏,学习Node不迷路!

一、npm的使用

npm是什么

使用npm前首先要了解什么是npm,在Node系列专栏的第一篇文章【Node.js | 从前端到全栈的必经之路】中提到npmnpm的开源仓库,并且是全球最大的开源仓库

这个仓库地址是:https://www.npmjs.com/

截至2020年3月17日,Node为大约1200万开发人员提供了130万个软件包,这些开发人员每月下载这些软件包达750亿次

要想去下载使用npm仓库里面的资源可以使用npmnpm的指令开头的,如npm 下载npm i axios)或使用其它第三方的指令(第三方的axios),如yarn等

官方说法:Node包管理器npm的包管理和分发工具

包管理就体现在它是个NodeJS的仓库,存放并管理着NodeJS的各种软件包

分发工具就体现在使用NodeJS去下载npm的指令仓库里的包

在我们配置npm环境时,NodeJS是随着npm指令模块一起安装的,我们可以通过终端运行NodeJS 查看安装的版本:

在这里插入图片描述

但如果默认安装的npm -v版本太老,你也可以自己手动安装更新npm

npm i npm@latest -g

npm 代表安装最新版本,@latest代表全局安装,这些-g指令将在后面讲到

上面可以发现一个神奇的事情,我们正在通过npm安装npm,自己安装自己?

这其实很好理解,npm也是作为一个包存放于npm的指令模块这个仓库中的,并且这个包的名字就叫npm,见npm地址:https://www.npmjs.com/package/npm

在这里插入图片描述

所以我们一般称呼的npm都只是指npm的这个指令模块(这个名为npm的包)

但其实npm这个词即代指了npm,也代指了npm指令模块这个npm开源仓库本身
所以就有了我们在NodeJS中(这个npm代表NodeJS的开源仓库)下载npm(这个npm代表名为npm的这个包,这个包是npm的指令模块)的说法

npm常用指令

npm的指令非常多,这里只列举出常用的,更多信息可见npm官方文档

  • npm :生成npm init

    在这里插入图片描述

  • package.json下载npm install中记录的所有资源

  • package.json下载指定的包到当前目录下

  • npm install 包名卸载当前目录下指定的包

  • npm uninstall 包名更新当前目录下指定的包,不加包名则更新当前目录下所有包

  • npm update 包名检查当前目录下指定包是否过时,不加包名则检查当前目录下所有包

  • npm outdated 包名获取当前目录下包的详细信息

  • npm info 包名查看当前目录下安装的所有包及其依赖并显示版本号npm list可简写为list

  • ls查看当前目录下安装的指定包的版本号npm list 包名可简写为list

几点补充:

  1. ls可简写为install,如:i可简写为npm install axios

  2. npm i axios 可简写为uninstall

  3. 在包名后加un符可指定包的版本,如:@下载1版本的md5,npm i md5@1表示下载最新版本的md5

npm i md5@latest指令后缀

  • npm:指定全局环境

    -g指令默认是在当前目录下操作,加上npm是指定在全局环境下操作,如上面提到的全局安装npm最新版:-g,这样在任何目录下都能使用npm

  • npm i npm@latest -g可简写为--save : 指定 生产环境 下的依赖(记录在-s中)

    dependencies版本之后默认是npm5,如安装在生产环境和开发环境都需要用到的axios:--save

  • npm i axios -s可简写为--save-dev:指定开发环境下的依赖(记录在-D中)

    如安装生产环境下不需要使用的babel(仅在开发环境下使用的到):devDependencies

  • npm i babel -D可简写为--save-prod:与-P相同

  • --save可简写为--save-optional:指定可选依赖(记录在-O中)

  • optionalDependencies:不会记录在--no-save

关于package.json的具体作用和区别可看我的这篇文章:npm install -g/–save/–save-dev的区别

npm指令后缀也可以放到包名的前面:-g,--save,--save-dev

依赖包管理

npm i -g npm@latest 中,熟知的依赖是 :npmdependencies

除此之外,其实还有包括 :

  • devDependencies,
  • peerDependencies
  • optionalDependencies

在内的几种依赖,这些都是在bundledDependencies / bundleDependencies中进行记录的:

在这里插入图片描述

上面我们说npm指令后缀时提到了这几种依赖,这里详细说一下它们代表什么:

package.jsondependencies

可查看我的另一篇文章: npm install -g/–save/–save-dev的区别

devDependencies

可查看大佬的文章:一文搞懂peerDependencies

贞龙网店商城电子商务系统java版
贞龙网店商城电子商务系统java版

BIZOSS-B2C是脱胎于贞龙B2B大型平台的网上商城系统、网上商店系统、网上购物系统的企业级B2C电子商务解决方案。系统设置:这里包含了网店的常用功能和全局配置的开关。包括 商店设置 、支付方式和配送方式 、邮件服务器设置、地区列表、友情链接、自定义导航栏、站点地图。商品管理:网店展示商品的核心。其中包括了 商品分类、商品类型、商品品牌、商品回收站、商品上下架等一些设置。促销管理:这个是我们网

下载

peerDependencies

可选依赖,如果有一些依赖包即使安装失败,项目仍然能够运行或者希望npm继续运行,就可以使用optionalDependencies,另外optionalDependencies会覆盖optionalDependencies中的同名依赖包,所以不要在两个地方都写

dependencies / bundledDependencies

打包依赖,bundleDependencies是一个包含依赖包名的数组对象,在发布时会将这个对象中的包打包到最终的发布包里,数组里面的包必须先在bundledDependenciesdevDependencies声明过,否则打包会报错

package.json中需要注意的包版本问题

通过dependencies下载的所有包的版本信息都会记录在npm

在运行package.json时就会根据npm i中记录的包信息进行下载,它的下载规则如下:

  • 包版本以package.json开头时(默认情况),会锁定大版本

       // package.json
      "dependencies": {
        "md5": "^2.1.0" // ^开头的
      },

    通过^将会安装npm i md5的最新版本(2大版本下的最新版本),并不一定是2.1.0,还可能是2.3.0

  • 包版本以2.x.x开头时,会锁定到第二个大版本

       // package.json
      "dependencies": {
        "md5": "~2.1.0"
      },

    通过~将会安装npm i md5的最新版本(2.1版本下的最新版本),并不一定是2.1.0,还可能是2.1.1

  • 包版本为2.1.x,会锁定到最新版本

      // package.json
      "dependencies": {
        "md5": "*"
      },

    通过*将会安装npm i的最新版本

  • 包版本前不带前缀,会锁定到指定版本

       // package.json
      "dependencies": {
        "md5": "2.1.0"
      },

    通过md5将会安装npm i的2.1.0版本

解决npm速度慢的问题

因为md5仓库在国外,我们在国内使用npm指令下载这个国外仓库的内容速度会比较慢

这时我们就可以运行以下指令将npm的仓库源切换到国内的淘宝镜像(cnpm) 的源:

npm config set registry https://registry.npmmirror.com

使用npm查看当前源:

在这里插入图片描述

往后再使用npm config get registry时就会自动从国内的淘宝镜像仓库下载了,速度就会很快

淘宝镜像之前的源地址为http://registry.npm.taobao.org,现在更改为了http://registry.npmmirror.com,查看详情

但我们这样通过修改npm的配置进行源的切换难免会有点麻烦,我们可以全局安装一个npm来帮助我们快速的切换nrm

使用nrm快速切换npm源

全局安装nrm

npm install -g nrm

执行npm查看可切换的npm源

在这里插入图片描述

使用nrm ls 切换源,如切换到淘宝源:npm use

在这里插入图片描述

使用nrm use taobao测试相应源的响应时间:

在这里插入图片描述

可以看到淘宝源的响应速度要比nrm test 源名的默认源快很多

中国npm镜像:cnpm

npm是一个完整的npmjs.org镜像,可以用它代替官方版本

cnpm与官方版本的同步频率为10分钟一次,cnpm官网

下载cnpm

 npm install -g cnpm --registry=https://registry.npmmirror.com

cnpm就是淘宝镜像,上面我们使用淘宝镜像只是将cnpm的源更改为淘宝镜像(npm)的源(这个源其实就是指仓库的地址),之后还是通过cnpm指令进行使用

而这里是直接下载npm这个完整镜像,之后就可以使用cnpm指令而不是cnpm指令:

cnpm installcnpm i axios -g

// ....

npm的指令与cnpm的指令完全相同,使用时直接使用cnpm代替npm就行

二、yarn的使用

yarn是Facebook发布的一款依赖管理工具,它比npm更快、更高效

安装:

npm install -g yarn

更新yarn:

yarn set version latest
yarn set version from sources

优点

  • 速度超快
    npm 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快

  • 超级安全
    在执行代码之前,yarn 会通过算法校验每个安装包的完整性

yarn常用指令

  • yarn:初始化项目,生成yarn init文件,生成步骤与package.json大致相同

    在这里插入图片描述

  • npm init:显示命令列表

  • yarn help:下载yarn install中记录的所有资源,可简写为package.json

  • yarn下载指定的包到当前目录下

  • yarn add 包名卸载当前目录下指定的包

  • yarn remove 包名更新当前目录下指定的包,包名后可加yarn upgrade 包名来指定需要更新到的版本

@指定版本号指令后缀

  • yarn:指定开发环境下的依赖(--dev),简写为devDependencies
  • -D:指定核心依赖--peer
  • peerDependencies:指定可选依赖--optional

结语

本篇文章介绍了optionalDependenciesnpm,以及npm派生出的yarnnrm

博主一直使用的是npm + nrm切换源的组合,因为这样不仅能保证速度快,能够方便的切换源,还不用下载像cnpmcnpm这些额外的包

yarnnpm的内容都比较多,本篇文章只是讲解了最常用的内容,如果想要了解更多可移步到对应的官网进行查看

更多node相关知识,请访问:nodejs 教程

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

37

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

37

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.7万人学习

MySQL 教程
MySQL 教程

共48课时 | 1.8万人学习

Sass 教程
Sass 教程

共14课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号