Node.js包管理工具(npm、yarn、cnpm)
1. 概念介紹
包是什么?
『包』英文單詞是package,代表了一組特定功能的源碼集合
包管理工具
管理『包』的應(yīng)用軟件,可以對(duì)「包」進(jìn)行下載安裝
,更新
,刪除
,上傳
等操作
借助包管理工具,可以快速開(kāi)發(fā)項(xiàng)目,提升開(kāi)發(fā)效率
包管理工具是一個(gè)通用的概念,很多編程語(yǔ)言都有包管理工具,所以掌握好包管理工具非常重要
常用的包管理工具
- npm
- yarn
- cnpm
2. npm
2.1 npm 下載
npm全稱Node Package Manager,翻譯為中文意思是『Node的包管理工具』
npm是node.js官方內(nèi)置的包管理工具,是必須要掌握住的工具
2.2 npm 初始化包
npm init
命令的作用是將文件夾初始化為一個(gè)『包』,交互式創(chuàng)建package.json文件
package.json
是包的配置文件,每個(gè)包都必須要有package.json
package.json
內(nèi)容示例:
{ "name": "test", "version": "1.0.0", "description": "學(xué)習(xí)npm", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC" }
初始化注意事項(xiàng):
- package name(
包名
)不能使用中文、大寫,默認(rèn)值是文件夾的名稱
,所以文件夾名稱也不能使用中文和大寫 - version(
版本號(hào)
)要求x.x.x
的形式定義,x
必須是數(shù)字,默認(rèn)值是1.0.0
- ISC證書與MT證書功能上是相同的,關(guān)于開(kāi)源證書擴(kuò)展閱讀
package.json
可以手動(dòng)創(chuàng)建與修改- 使用
npm init -y
或者npm init --yes
極速創(chuàng)建package.json
(文件夾名稱不包含大寫字母和漢字)
2.3 npm 包
(1) npm 搜索包
- 命令行[ npm s(/search) 關(guān)鍵字]
- 網(wǎng)站搜索https://www.npmjs.com/
對(duì)于如何精準(zhǔn)找到需要的包,這就需要我們長(zhǎng)期學(xué)習(xí),通過(guò)文章、項(xiàng)目去積累
(2) npm 下載安裝包
我們可以通過(guò)npm install
和npm i
命令安裝包
要確保是在聯(lián)網(wǎng)狀態(tài)下
#格式 npm install <包名> npm i <包名>
#示例 比如我們要使用uniq 這個(gè)包給數(shù)組去重 npm install uniq npm i uniq
運(yùn)行之后文件夾下會(huì)增加兩個(gè)資源
node_modules文件夾
存放下載的包package-lock.json包的鎖文件
,用來(lái)鎖定包的版本
如果出現(xiàn)錯(cuò)誤,可以試試給node.js 配置一下環(huán)境變量。
const uniq = require('uniq') const array = [1, 2, 3, 4, 5, 6, 2, 3, 4, 5, 2] const result = uniq(array) console.log(result)
// [ 1, 2, 3, 4, 5, 6 ]
安裝uniq 之后,uniq 就是當(dāng)前這個(gè)包的一個(gè)
依賴包
,有時(shí)會(huì)簡(jiǎn)稱為依賴
比如我們創(chuàng)建一個(gè)包名字為A,A中安裝了包名字是B,我們就說(shuō)B是A的一個(gè)依賴包
,也會(huì)說(shuō)A依賴B
(3) require 導(dǎo)入npm 包的基本流程
require 導(dǎo)入模塊的類型有三種:
- 內(nèi)置模塊
- 自定義模塊
- npm 包
require 導(dǎo)入npm 包的基本流程:
- 在當(dāng)前文件夾下node_modules中尋找同名的文件夾
- 在上級(jí)目錄中下的node_modules中尋找同名的文件夾,直至找到磁盤根目錄
const uniq = require('uniq'); const uniq = require('./node_modules/uniq'); const uniq = require('./node_modules/uniq/uniq.js');
其實(shí)怕我們導(dǎo)入npm 包有以上三種方式,但是下面兩種方式的導(dǎo)入位置都太絕對(duì)了,一旦更換了node_modules 文件夾的位置就會(huì)出錯(cuò);所以一般我們會(huì)使用第一種導(dǎo)入方式。
2.4 開(kāi)發(fā)依賴和生產(chǎn)依賴
首先來(lái)了解一下生產(chǎn)環(huán)境和開(kāi)發(fā)環(huán)境!
開(kāi)發(fā)環(huán)境是程序員
專門用來(lái)寫代碼
的環(huán)境,一般是指程序員的電腦,開(kāi)發(fā)環(huán)境的項(xiàng)目一般只能程序員自己訪問(wèn)
生產(chǎn)環(huán)境是項(xiàng)目代碼正式運(yùn)行
的環(huán)境,一般是指正式的服務(wù)器電腦,生產(chǎn)環(huán)境的項(xiàng)目一般每個(gè)客戶都可以訪問(wèn)
我們可以在安裝時(shí)設(shè)置選項(xiàng)來(lái)區(qū)分依賴的類型,目前分為兩類:
舉個(gè)例子方便大家理解,比如說(shuō)做蛋炒飯需要大米,油,蔥,雞蛋,鍋,煤氣,鏟子等
其中鍋,煤氣,鏟子屬于開(kāi)發(fā)依賴,只在制作階段使用
而大米,油,蔥,雞蛋屬于生產(chǎn)依賴,在制作與最終食用都會(huì)用到
所以開(kāi)發(fā)依賴是只在開(kāi)發(fā)階段使用的依賴包,而生產(chǎn)依賴是開(kāi)發(fā)階段和最終上線運(yùn)行階段都用到的依賴包
2.5 npm 全局安裝
之前我們使用npm 包安裝方式都是局部安裝,也就是出了某個(gè)文件夾就沒(méi)辦法使用了;現(xiàn)在我們來(lái)學(xué)習(xí)一下npm 的全局安裝
。
npm i -g nodemon
全局安裝完成之后就可以在命令行的任何位置運(yùn)行nodemon 命令
該命令的作用是自動(dòng)重啟node應(yīng)用程序
也就是不像以前一樣修改文件后先暫停上次請(qǐng)求再重新啟動(dòng)文件了;有了這個(gè)包后,只要保存了文件再次刷新網(wǎng)頁(yè),網(wǎng)頁(yè)內(nèi)容就會(huì)更新了。
說(shuō)明:
- 全局安裝的命令不受工作目錄位置影響
- 可以通過(guò)
npm root -g
可以查看全局安裝包的位置 不是所有的包都適合全局安裝
,只有全局類的工具才適合,可以通過(guò)查看包的官方文檔來(lái)確定安裝方式
,這里先不必太糾結(jié)
(1) 修改windows 執(zhí)行策略
有些電腦在安裝nodemon 包是可能會(huì)出現(xiàn)問(wèn)題,可能是windows 默認(rèn)不允許npm 全局執(zhí)行腳本文件,所以需要修改執(zhí)行策略。
(2) 環(huán)境變量Path
命令行根目錄下如果有xxx.exe / xxx.cmd 的文件在,程序就會(huì)去執(zhí)行文件;
我們?nèi)绻渲媚硞€(gè)程序的環(huán)境變量,那么就可以在命令行窗口直接輸入程序名就可以打開(kāi)程序。
如果遇到想要在命令行的任何位置都可以打開(kāi)某個(gè)程序就可以為之配置環(huán)境變量。
2.6 安裝包依賴
在項(xiàng)目協(xié)作中有一個(gè)常用的命令就是npm i
,通過(guò)該命令可以依據(jù)package.json
和package-lock.json
的依賴聲明安裝項(xiàng)目依賴
npm i
npm install
node_modules文件夾大多數(shù)情況都不會(huì)存入版本/倉(cāng)庫(kù)
在下載別人的代碼的時(shí)候文件夾中一般都是沒(méi)有node_modules 文件夾的,這樣我們的代碼可能就沒(méi)有辦法運(yùn)行,如果我們一個(gè)一個(gè)的安裝依賴效率很低,所以就可以使用npm i 安裝依賴,就可以啟動(dòng)項(xiàng)目了。
2.7 安裝指定版本的包
項(xiàng)目中可能會(huì)遇到版本不匹配的情況,有時(shí)就需要安裝指定版本的包,可以使用下面的命令的
##格式 npm i <包名@版本號(hào)> ##示例 npm i jquery@1.11.2
2.8 刪除依賴
項(xiàng)目中可能需要?jiǎng)h除某些不需要的包,可以使用下面的命令
##局部刪除 npm remove uniq npm r uniq ##全局刪除 npm remove -g nodemon
2.9 配置命令別名
通過(guò)配置命令別名可以更簡(jiǎn)單的執(zhí)行命令!
配置package,json中的scripts屬性
{ . . . “scripts”:{ “server”:“node server.js”, “start”:“node index.js”, } . . . }
配置完成之后,可以使用別名執(zhí)行命令
npm run server npm run start
不過(guò)start別名比較特別,使用時(shí)可以省略run
npm start
補(bǔ)充說(shuō)明:
npm start是項(xiàng)目中常用的一個(gè)命令,一般用來(lái)啟動(dòng)項(xiàng)目
npm run有自動(dòng)向上級(jí)目錄查找的特性,跟require函數(shù)也一樣
對(duì)于陌生的項(xiàng)目,我們可以通過(guò)查看scripts屬性來(lái)參考項(xiàng)目的一些操作
3. cnpm
3.1 cnpm 介紹與安裝
cnpm是一個(gè)淘寶構(gòu)建的npmjs.com
的完整鏡像,也稱為 淘寶鏡像 ,網(wǎng)址https://npmmirror…com/cnpm服務(wù)部署在國(guó)內(nèi)阿里云服務(wù)器
上,可以提高包的下載速度
官方也提供了一個(gè)全局工具包cnpm
,操作命令與npm大體相同
我們可以通過(guò)npm來(lái)安裝cnpm工具
npm install -g cnpm --registry=https://registry.npmmirror.com
3.2 操作命令
功能 | 命令 |
---|---|
初始化 | cnpm init |
安裝包 | cnpm i uniq / cnpm i -S uniq / cnpm i -D uniq / cnpm i -g uniq |
安裝項(xiàng)目依賴 | cnpm i |
刪除 | cnpm r uniq |
基本使用與npm 是一樣的。
4. npm 配置淘寶鏡像
用npm 也可以使用淘寶鏡像,配置的方式有兩種
- 直接配置
- 工具配置
4.1 直接配置
執(zhí)行如下命令即可完成配置
npm config set registry https://registry.npmmirror.com/
4.2 工具配置
使用nrm
配置npm的鏡像地址npm registry manager
決定npm 下載包的地址
安裝nrm
npm i -g nrm
修改鏡像
nrm use taobao
nrm 切換注冊(cè)地址 / 鏡像也很方便。
nrm ls
列出支持的鏡像地址
檢查是否配置成功 (選做)
npm config list
檢查registry 地址是否為https://registry.npmmirror.com/,如果是則表明成功
補(bǔ)充說(shuō)明:
1.建議使用第二種方式進(jìn)行鏡像配置,因?yàn)楹罄m(xù)修改起來(lái)會(huì)比較方便
2.雖然cnpm可以提高速度,但是npm也可以通過(guò)淘寶鏡像進(jìn)行加速,所以npm的使用率還是高于cnpm
5. yarn
5.1 介紹
yarn是由Facebook在2016年推出的新的Javascript包管理工具,官方網(wǎng)址:https:/yarnpkg.com/
5.2 特點(diǎn)
yarm官方宣稱的一些特點(diǎn)
- 速度超快:yarn 緩存了每個(gè)下載過(guò)的包,所以再次使用時(shí)無(wú)需重復(fù)下載。同時(shí)利用并行下載以最大化資源利用率,因此安裝速度更快
- 超級(jí)安全:在執(zhí)行代碼之前,yarn 會(huì)通過(guò)算法校驗(yàn)每個(gè)安裝包的完整性
- 超級(jí)可靠:使用詳細(xì)、簡(jiǎn)潔的鎖文件格式和明確的安裝算法,yarn 能夠保證在不同系統(tǒng)上無(wú)差異的工作
我們可以使用npm安裝yarn
npm i -g yarn
5.3 yarn 常用命令
5.4 yarn 配置淘寶鏡像
可以通過(guò)如下命令配置淘寶鏡像
yarn config set registry https://registry.npmmirror.com/
可以通過(guò)yarn config list查看yarm的配置項(xiàng)
5.5 npm 和yarn 選擇
大家可以根據(jù)不同的場(chǎng)景進(jìn)行選擇
1.個(gè)人項(xiàng)目
如果是個(gè)人項(xiàng)目,哪個(gè)工具都可以
,可以根據(jù)自己的喜好來(lái)選擇
2.公司項(xiàng)目
如果是公司要根據(jù)項(xiàng)目代碼來(lái)選擇,可以通過(guò)鎖文件
判斷項(xiàng)目的包管理工具
- npm的鎖文件為
package-lock.json
- yarm的鎖文件為
yarn.lock
包管理工具不要混著用,切記,切記,切記
6. npm 發(fā)布一個(gè)包
目前了解即可,不太常用
我們可以將自己開(kāi)發(fā)的工具包發(fā)布到npm服務(wù)上,方便自己和其他開(kāi)發(fā)者使用,操作步驟如下:
- 創(chuàng)建文件夾,并創(chuàng)建文件index.js,在文件中聲明函數(shù),使用module.exports暴露
- npm初始化工具包,package.json填寫包的信息(包的名字是唯一的)
- 注冊(cè)賬號(hào) https:/www.npmjs.com/signup
- 激活賬號(hào)(一定要激活賬號(hào))
- 修改為官方的官方鏡像(命令行中運(yùn)行nrm use npm)
- 命令行下npm login填寫相關(guān)用戶信息
- 命令行下npm publish提交包
更新包:
后續(xù)可以對(duì)自己發(fā)布的包進(jìn)行更新,操作步驟如下
- 更新包中的代碼
- 測(cè)試代碼是否可用
- 修改package.json中的版本號(hào)
- 發(fā)布更新
npm publish
刪除包:執(zhí)行如下命令刪除包
npm unpublish
刪除包需要滿足一定的條件,https::/docs.npmjs.com/policies/unpublish
你是包的作者
發(fā)布小于24小時(shí)
大于24小時(shí)后,沒(méi)有其他包依賴,并且每周小于300下載量,并且只有一個(gè)維護(hù)者
7. 擴(kuò)展內(nèi)容
除了編程語(yǔ)言領(lǐng)域有包管理工具之外,操作系統(tǒng)層面也存在包管理工具,不過(guò)這個(gè)包指的是『軟件包』
8. nvm 介紹和使用
nvm全稱Node Version Manager
顧名思義它是用來(lái)管理node版本的工具,方便切換不同版本的Node.js
nvm的使用非常的簡(jiǎn)單,跟npm的使用方法類似
常用命令:
到此這篇關(guān)于Node.js包管理工具(npm、yarn、cnpm)的文章就介紹到這了,更多相關(guān)Node.js包管理工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
nodejs實(shí)現(xiàn)套接字服務(wù)功能詳解
這篇文章主要介紹了nodejs實(shí)現(xiàn)套接字服務(wù)功能,簡(jiǎn)單描述了套接字的概念、功能,并結(jié)合實(shí)例形式分析了nodejs使用socket對(duì)象創(chuàng)建及使用套接字進(jìn)行數(shù)據(jù)傳輸相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-06-06Node.js web 應(yīng)用如何封裝到Docker容器中
這篇文章主要介紹了Node.js web 應(yīng)用如何封裝到Docker容器中,幫助大家更好的學(xué)習(xí)node.js和使用docker容器,感興趣的朋友可以了解下2020-09-09詳解node.js創(chuàng)建一個(gè)web服務(wù)器(Server)的詳細(xì)步驟
這篇文章主要介紹了詳解node.js創(chuàng)建一個(gè)web服務(wù)器(Server)的詳細(xì)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01