這篇文章帶大家了解一下Node.js的兩個強大套件管理器:npm 和 yarn,希望對大家有幫助!
學習Node
的第一步就是要了解node的套件管理器:npm
,對於npm
相信大家並不陌生,因為我們常用它去下載一些套件資源
但因為npm
的資源庫(https: //www.npmjs.com/)在國外,使用它下載資源的速度比較慢,於是就出現了yarn
這些第三方的node套件管理器
以及國內的跟npm
倉庫同步更新的淘寶鏡像(cnpm)
接下來我們就將深入去學習這些內容,讓我們開始吧!
Node系列專欄開始更新了,追蹤博主,訂閱專欄,學習Node不迷路!
一、npm的使用
#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官方文件
- 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
:指定全域環境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
- peerDependencies
,
- optionalDependencies
- bundledDependencies / bundleDependencies
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的使用
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中文網其他相關文章!

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。