概述
本篇文章带大家了解一下Node.js的两个强大包管理器:npm 和 yarn,希望对大家有所帮助!
学习Node
的第一步就是要了解node的包管理器:npm
,对于npm
相信大家并不陌生,因为我们常用它去下载一些包资源
但因为npm
的资源库(https://www.npmjs.com/)在国外,使用它下载资源的速度比较慢,于是就出现了yarn
这些第三方的node包管理器
以及国内的跟npm
仓库同步更新的淘宝镜像(cnpm)
接下来我们就将深入去学习这些内容,让我们开始吧!
一、npm的使用
npm是什么
使用npm
前首先要了解什么是npm
,在Node系列专栏的第一篇文章【Node.js | 从前端到全栈的必经之路】中提到npm
是Node
的开源仓库,并且是全球最大的开源仓库
截至2020年3月17日,npm
为大约1200万开发人员提供了130万个软件包,这些开发人员每月下载这些软件包达750亿次
要想去下载使用npm
仓库里面的资源可以使用npm的指令
(npm
开头的,如npm i axios
下载axios
)或使用其它第三方的指令(第三方的Node包管理器
),如yarn等
在我们配置NodeJS
环境时,npm指令模块
是随着NodeJS
一起安装的,我们可以通过终端运行npm -v
查看安装的版本:
但如果默认安装的npm
版本太老,你也可以自己手动安装更新npm:
npm i npm@latest -g
登录后复制
上面可以发现一个神奇的事情,我们正在通过npm
安装npm
,自己安装自己?
这其实很好理解,npm的指令模块
也是作为一个包存放于npm
这个仓库中的,并且这个包的名字就叫npm
,见npm
地址:https://www.npmjs.com/package/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
可简写为ls
)
几点补充:
install
可简写为i
,如:npm install axios
可简写为npm i axios
uninstall
可简写为un
在包名后加
@
符可指定包的版本,如:npm i md5@1
下载1版本的md5,npm i md5@latest
表示下载最新版本的md5
npm
指令后缀
-g
:指定全局环境--save
可简写为-s
: 指定 生产环境 下的依赖(记录在dependencies
中)--save-dev
可简写为-D
:指定开发环境下的依赖(记录在devDependencies
中)--save-prod
可简写为-P
:与--save
相同--save-optional
可简写为-O
:指定可选依赖(记录在optionalDependencies
中)--no-save
:不会记录在package.json
中
依赖包管理
在 npm
中,熟知的依赖是 :dependencies
和 devDependencies
除此之外,其实还有包括 :
peerDependencies
,optionalDependencies
bundledDependencies / bundleDependencies
在内的几种依赖,这些都是在package.json
中进行记录的:
上面我们说npm指令后缀时提到了这几种依赖,这里详细说一下它们代表什么:
dependencies
和 devDependencies
peerDependencies
optionalDependencies
bundledDependencies
/ bundleDependencies
package.json中需要注意的包版本问题
通过npm
下载的所有包的版本信息都会记录在package.json
中
在运行npm i
时就会根据package.json
中记录的包信息进行下载,它的下载规则如下:
包版本以
^
开头时(默认情况),会锁定大版本// package.json "dependencies": { "md5": "^2.1.0" // ^开头的 },
登录后复制包版本以
~
开头时,会锁定到第二个大版本// package.json "dependencies": { "md5": "~2.1.0" },
登录后复制包版本为
*
,会锁定到最新版本// package.json "dependencies": { "md5": "*" },
登录后复制包版本前不带前缀,会锁定到指定版本
// package.json "dependencies": { "md5": "2.1.0" },
登录后复制
解决npm速度慢的问题
因为npm
仓库在国外,我们在国内使用npm
指令下载这个国外仓库的内容速度会比较慢
这时我们就可以运行以下指令将npm
的仓库源切换到国内的淘宝镜像(cnpm) 的源:
npm config set registry https://registry.npmmirror.com
登录后复制
使用npm config get registry
查看当前源:
往后再使用npm
时就会自动从国内的淘宝镜像仓库下载了,速度就会很快
但我们这样通过修改npm
的配置进行源的切换难免会有点麻烦,我们可以全局安装一个nrm
来帮助我们快速的切换npm
源
使用nrm快速切换npm源
全局安装nrm:
npm install -g nrm
登录后复制
执行nrm ls
可查看可切换的npm源:
使用npm use
切换源,如切换到淘宝源:nrm use taobao
使用nrm test 源名
测试相应源的响应时间:
可以看到淘宝源的响应速度要比npm
的默认源快很多
中国npm镜像:cnpm
cnpm
是一个完整的npmjs.org镜像,可以用它代替官方版本
下载cnpm
:
npm install -g cnpm --registry=https://registry.npmmirror.com
登录后复制
cnpm就是淘宝镜像,上面我们使用淘宝镜像源只是将npm
的源更改为淘宝镜像(cnpm
)的源(这个源其实就是指仓库的地址),之后还是通过npm
指令进行使用
而这里是直接下载cnpm
这个完整镜像,之后就可以使用cnpm
指令而不是npm
指令:
cnpm installcnpm i axios -g
// ....
登录后复制
二、yarn的使用
yarn是Facebook发布的一款依赖管理工具,它比npm
更快、更高效
安装:
npm install -g yarn
登录后复制
更新yarn:
yarn set version latest
yarn set version from sources
登录后复制
优点
速度超快
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
:指定可选依赖(optionalDependencies
)
结语
本篇文章介绍了npm
和yarn
,以及npm派生出的nrm
,cnpm
等
博主一直使用的是npm + nrm切换源的组合,因为这样不仅能保证速度快,能够方便的切换源,还不用下载像cnpm
,yarn
这些额外的包
npm
和yarn
的内容都比较多,本篇文章只是讲解了最常用的内容,如果想要了解更多可移步到对应的官网进行查看
最后
以上就是醉熏外套为你收集整理的了解两个强大的Node包管理器:npm 和 yarn的全部内容,希望文章能够帮你解决了解两个强大的Node包管理器:npm 和 yarn所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复