首頁 > web前端 > js教程 > 主體

了解兩個強大的Node套件管理器:npm 和 yarn

青灯夜游
發布: 2022-08-25 11:00:50
轉載
1843 人瀏覽過

這篇文章帶大家了解一下Node.js的兩個強大套件管理器:npm 和 yarn,希望對大家有幫助!

了解兩個強大的Node套件管理器:npm 和 yarn

學習Node的第一步就是要了解node的套件管理器npm,對於npm相信大家並不陌生,因為我們常用它去下載一些套件資源

但因為npm的資源庫(https: //www.npmjs.com/)在國外,使用它下載資源的速度比較慢,於是就出現了yarn這些第三方node套件管理器以及國內的跟npm倉庫同步更新的淘寶鏡像(cnpm)

接下來我們就將深入去學習這些內容,讓我們開始吧!

Node系列專欄開始更新了,追蹤博主,訂閱專欄,學習Node不迷路!

一、npm的使用

#npm是什麼

使用npm前首先要了解什麼是npm,在Node系列專欄的第一篇文章【Node.js | 從前端到全棧的必經之路】中提到 npmNode的開源倉庫,並且是全球最大的開源倉庫

這個倉庫位址是:https://www.npmjs.com/

截至2020年3月17日,npm為大約1200萬開發人員提供了130萬個軟體包,這些開發人員每月下載這些軟體包達750億次

要想要去下載使用npm倉庫裡面的資源可以使用npm的指令npm開頭的,如npm i axios 下載axios)或使用其它第三方的指令(第三方的Node套件管理器 ),如yarn等

官方說法:npmNodeJS的套件管理和分發工具

套件管理就體現在它是個NodeJS的倉庫,存放並管理著NodeJS的各種軟體包

分發工具就體現在使用npm的指令去下載npm倉庫裡的套件

在我們設定 NodeJS環境時,npm指令模組是隨著NodeJS一起安裝的,我們可以透過終端機執行npm -v 查看安裝的版本:

了解兩個強大的Node套件管理器:npm 和 yarn

但如果預設安裝的npm版本太老,你也可以自己手動安裝更新npm

npm i npm@latest -g
登入後複製

@latest 代表安裝最新版本,-g代表全域安裝,這些npm指令將在後面講到

上面可以發現一個神奇的事情,我們正在透過npm安裝npm,自己安裝自己?

這其實很好理解,npm的指令模組也是作為一個包存放於npm這個倉庫中的,並且這個包的名字就叫 npm,請參閱npm地址:https://www.npmjs.com/package/npm

了解兩個強大的Node套件管理器:npm 和 yarn

##所以

我們一般稱呼的npm都只是指npm的這個指令模組(這個名為npm的套件)

#但其實

npm這個字就是代指了npm指令模組,也代指了npm這個NodeJS開源倉庫本身 所以就有了我們在
npm(這個npm代表NodeJS的開源倉庫)下載npm(這個npm代表一個名為npm的這個包,這個包是npm的指令模組)的說法

##npm常用指令

npm

的指令非常多,這裡只列舉常用的,更多資訊可見npm官方文件

  • npm init

    :產生package.json

    了解兩個強大的Node套件管理器:npm 和 yarn

  • npm install

    下載package.json中記錄的所有資源

  • ##npm install 套件名
  • 下載指定的套件到目前目錄下

  • #npm uninstall 套件名稱
  • 卸載目前目錄下指定的套件

  • npm update 套件名稱更新目前目錄下指定的套件,不加套件名稱則更新目前目錄下所有套件

  • npm outdated 套件名稱檢查目前目錄下指定套件是否過時,不加套件名稱則檢查目前目錄下所有套件

  • npm info 套件名稱取得目前目錄下套件的詳細資訊

  • npm list查看目前目錄下安裝的所有套件及其依賴並顯示版本號碼list可簡寫為ls

  • npm list 套件名稱查看目前目錄下安裝的指定套件的版本號碼list可簡寫為ls

#幾點補充:

  1. install可簡寫為i,如:npm install axios可簡寫為npm i axios

  2. uninstall 可簡寫為un

  3. 在套件名稱後面加上@ 符可指定套件的版本,如: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# 中,熟悉的依賴是:dependenciesdevDependencies

#除此之外,其實還有包括:

  • peerDependencies,
  • optionalDependencies
  • bundledDependencies / bundleDependencies
在內的幾個依賴,這些都是在

package.json中進行記錄的:

了解兩個強大的Node套件管理器:npm 和 yarn

上面我們說

npm指令後綴時提到了這幾種依賴,這裡詳細說一下它們代表什麼:

dependenciesdevDependencies

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

#peerDependencies

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

#optionalDependencies

可選依賴,如果有一些依賴套件即使安裝失敗,專案仍然能夠運行或希望npm繼續運行,就可以使用

optionalDependencies,另外optionalDependencies會覆寫dependencies中的同名依賴包,所以不要在兩個地方都寫

bundledDependencies / bundleDependencies

打包依賴,

bundledDependencies是一個包含依賴套件名稱的陣列對象,在發佈時會將這個物件中的套件打包到最終的發布包裡,數組裡面的包必須先在devDependenciesdependencies聲明過,否則打包會報錯

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查看当前源:

了解兩個強大的Node套件管理器:npm 和 yarn

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

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

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

使用nrm快速切换npm源

全局安装nrm

npm install -g nrm
登入後複製

执行nrm ls查看可切换的npm源

了解兩個強大的Node套件管理器:npm 和 yarn

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

了解兩個強大的Node套件管理器:npm 和 yarn

使用nrm test 源名测试相应源的响应时间:

了解兩個強大的Node套件管理器:npm 和 yarn

可以看到淘宝源的响应速度要比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的使用

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大致相同

    了解兩個強大的Node套件管理器:npm 和 yarn

  • yarn help:顯示指令清單

  • yarn install:下載package.json中記錄的所有資源,可簡寫為yarn

  • #yarn add 套件名稱下載指定的套件到目前目錄下

  • yarn remove 套件名稱: 卸載目前目錄下指定的套件

  • yarn upgrade 套件名稱更新目前目錄下指定的包,包名後可加@指定版本號來指定需要更新到的版本

yarn指令後綴

  • --dev#:指定開發環境下的依賴( devDependencies),簡寫為-D
  • #--peer:指定核心依賴 peerDependencies )
  • --optional:指定可選依賴optionalDependencies

結語

本篇文章介紹了npm#和yarn,以及npm衍生出的nrmcnpm

部落客一直使用的是npm nrm切換來源的組合,因為這不僅能保證速度快,能夠方便的切換來源,還不用下載像cnpmyarn這些額外的套件

npmyarn的內容都比較多,本篇文章只是講解了最常用的內容,如果想要了解更多可移步到對應的官網進行查看

更多node相關知識,請訪問:nodejs 教程

以上是了解兩個強大的Node套件管理器:npm 和 yarn的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!