這篇文章帶大家了解一下Node.js的兩個強大套件管理器:npm 和 yarn,希望對大家有幫助!
學習Node
的第一步就是要了解node的套件管理器:npm
,對於npm
相信大家並不陌生,因為我們常用它去下載一些套件資源
但因為npm
的資源庫(https: //www.npmjs.com/)在國外,使用它下載資源的速度比較慢,於是就出現了yarn
這些第三方的node套件管理器
以及國內的跟npm
倉庫同步更新的淘寶鏡像(cnpm)
接下來我們就將深入去學習這些內容,讓我們開始吧!
Node系列專欄開始更新了,追蹤博主,訂閱專欄,學習Node不迷路!
#npm是什麼
使用npm
前首先要了解什麼是npm
,在Node系列專欄的第一篇文章【Node.js | 從前端到全棧的必經之路】中提到 npm
是Node
的開源倉庫,並且是全球最大的開源倉庫
這個倉庫位址是:https://www.npmjs.com/
截至2020年3月17日,npm
為大約1200萬開發人員提供了130萬個軟體包,這些開發人員每月下載這些軟體包達750億次
要想要去下載使用npm
倉庫裡面的資源可以使用npm的指令
( npm
開頭的,如npm i axios
下載axios
)或使用其它第三方的指令(第三方的Node套件管理器
),如yarn等
官方說法:
npm
是NodeJS
的套件管理和分發工具套件管理就體現在它是個
NodeJS
的倉庫,存放並管理著NodeJS
的各種軟體包分發工具就體現在使用
npm的指令
去下載npm
倉庫裡的套件
在我們設定 NodeJS
環境時,npm指令模組
是隨著NodeJS
一起安裝的,我們可以透過終端機執行npm -v
查看安裝的版本:
但如果預設安裝的npm
版本太老,你也可以自己手動安裝更新npm:
npm i npm@latest -g
@latest
代表安裝最新版本,-g
代表全域安裝,這些npm
指令將在後面講到
上面可以發現一個神奇的事情,我們正在透過npm
安裝npm
,自己安裝自己?
這其實很好理解,npm的指令模組
也是作為一個包存放於npm
這個倉庫中的,並且這個包的名字就叫 npm
,請參閱npm
地址:https://www.npmjs.com/package/npm
我們一般稱呼的npm都只是指npm的這個指令模組(這個名為npm的套件)
#但其實npm
這個字就是代指了
npm指令模組,也代指了
npm這個
NodeJS開源倉庫本身
所以就有了我們在
npm(這個npm代表NodeJS的開源倉庫)下載
npm(這個npm代表一個名為npm的這個包,這個包是npm的指令模組)的說法
##npm常用指令
npm的指令非常多,這裡只列舉常用的,更多資訊可見npm官方文件
:產生package.json
:下載
package.json中記錄的所有資源
下載指定的套件到目前目錄下
卸載目前目錄下指定的套件
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
:指定全域環境
npm
指令預設是在目前目錄下操作,加上-g
是指定在全域環境下操作,如上面提到的全域安裝npm最新版:npm i npm@latest -g
,這樣在任何目錄下都能使用npm
--save
可簡寫為-s
: 指定生產環境 下的依賴(記錄在dependencies
中)
npm5
版本之後預設是--save
,如安裝在生產環境和開發環境都需要用到的axios:npm i axios -s
#--save-dev
可簡寫為-D
:指定開發環境下的依賴(記錄在devDependencies
中)
如安裝生產環境下不需要使用的babel(僅在開發環境下使用的到):
npm i babel -D
#--save-prod
可簡寫為-P
:與--save
相同
--save -optional
可簡寫為-O
:指定可選依賴(記錄在optionalDependencies
)
#--no-save
:不會記錄在package.json
關於
-g,--save,--save-dev
的具體作用和區別可看我的這篇文章:npm install -g/–save/–save-dev的區別
npm指令後綴也可以放到套件名稱的前面:
npm i -g npm@latest
##依賴套件管理
在npm# 中,熟悉的依賴是:
dependencies 和
devDependencies
,
package.json中進行記錄的:
npm指令後綴時提到了這幾種依賴,這裡詳細說一下它們代表什麼:
dependencies和
devDependencies
可查看我的另一篇文章: npm install -g/–save/–save-dev的差異
#peerDependencies
可查看大佬的文章:一文搞懂peerDependencies
#optionalDependencies
可選依賴,如果有一些依賴套件即使安裝失敗,專案仍然能夠運行或希望npm繼續運行,就可以使用optionalDependencies
,另外
optionalDependencies會覆寫
dependencies中的同名依賴包,所以不要在兩個地方都寫
bundledDependencies /
bundleDependencies
打包依賴,bundledDependencies
是一個包含依賴套件名稱的陣列對象,在發佈時會將這個物件中的套件打包到最終的發布包裡,數組裡面的包必須先在
devDependencies或
dependencies聲明過,否則打包會報錯
package.json中需要注意的包版本问题
通过npm
下载的所有包的版本信息都会记录在package.json
中
在运行npm i
时就会根据package.json
中记录的包信息进行下载,它的下载规则如下:
包版本以^
开头时(默认情况),会锁定大版本
// package.json "dependencies": { "md5": "^2.1.0" // ^开头的 },
通过
npm i
将会安装md5
2.x.x
的最新版本(2大版本下的最新版本),并不一定是2.1.0,还可能是2.3.0
包版本以~
开头时,会锁定到第二个大版本
// package.json "dependencies": { "md5": "~2.1.0" },
通过
npm i
将会安装md5
2.1.x
的最新版本(2.1版本下的最新版本),并不一定是2.1.0,还可能是2.1.1
包版本为*
,会锁定到最新版本
// package.json "dependencies": { "md5": "*" },
通过
npm i
将会安装md5
的最新版本
包版本前不带前缀,会锁定到指定版本
// package.json "dependencies": { "md5": "2.1.0" },
通过
npm i
将会安装md5
的2.1.0版本
解决npm速度慢的问题
因为npm
仓库在国外,我们在国内使用npm
指令下载这个国外仓库的内容速度会比较慢
这时我们就可以运行以下指令将npm
的仓库源切换到国内的淘宝镜像(cnpm) 的源:
npm config set registry https://registry.npmmirror.com
使用npm config get registry
查看当前源:
往后再使用npm
时就会自动从国内的淘宝镜像仓库下载了,速度就会很快
淘宝镜像之前的源地址为http://registry.npm.taobao.org,现在更改为了http://registry.npmmirror.com,查看详情
但我们这样通过修改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
与官方版本的同步频率为10分钟一次,cnpm官网
下载cnpm
:
npm install -g cnpm --registry=https://registry.npmmirror.com
cnpm就是淘宝镜像,上面我们使用淘宝镜像源只是将npm
的源更改为淘宝镜像(cnpm
)的源(这个源其实就是指仓库的地址),之后还是通过npm
指令进行使用
而这里是直接下载cnpm
这个完整镜像,之后就可以使用cnpm
指令而不是npm
指令:
cnpm installcnpm i axios -g // ....
cnpm
的指令与npm
的指令完全相同,使用时直接使用cnpm代替npm就行
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相關知識,請訪問:nodejs 教程!
以上是了解兩個強大的Node套件管理器:npm 和 yarn的詳細內容。更多資訊請關注PHP中文網其他相關文章!