npm的使用技巧
一、基本概念
npm 全稱(chēng)為 Node Package Manager,是一個(gè)基于 Node.js 的包管理器,也是 Node.js 社區(qū)最流行、支持的第三方模塊最多的包管理器。它的初衷就是讓開(kāi)發(fā)人員更容易分享和重用代碼。npm 提供了命令行工具,其主要功能是管理Node.js包,包括安裝、更新、刪除、查看、搜索、發(fā)布等。 ?
npm 最初只是Node.js 的包管理器,但隨著前端技術(shù)的不斷發(fā)展,它的定位變成了廣義的包管理器,可以實(shí)現(xiàn)JavaScript、React、Vue、Gulp、移動(dòng)開(kāi)發(fā)等包管理,是目前最大、生態(tài)最為健全的包管理器。?
| 命令 | 作用 | |
| npm -v | 查看 npm 版本。 | |
| npm init | 初始化后會(huì)出現(xiàn)一個(gè) package.json 配置文件。可以在后面加上 -y ,快速跳過(guò)問(wèn)答式界面。 | |
| npm install | 根據(jù)項(xiàng)目中的 package.json 文件自動(dòng)下載項(xiàng)目所需的全部依賴(lài)。 | |
| npm install 包名 --save-dev(npm install 包名 -D) | 安裝的包只用于開(kāi)發(fā)環(huán)境,不用于生產(chǎn)環(huán)境,會(huì)出現(xiàn)在 package.json 文件中的 devDependencies 屬性中。 | |
| npm install 包名 --save(npm install 包名 -S) | 安裝的包需要發(fā)布到生產(chǎn)環(huán)境的,會(huì)出現(xiàn)在 package.json 文件中的 dependencies 屬性中。 | |
| npm list | 查看當(dāng)前目錄下已安裝的 node 包。 | |
| npm list -g | 查看全局已經(jīng)安裝過(guò)的 node 包。 | |
| npm --help | 查看 npm 幫助命令。 | |
| npm update 包名 | 更新指定包。 | |
| npm uninstall 包名 | 卸載指定包。 | |
| npm config list | 查看配置信息。 | |
| npm info 指定包名 |
| |
| npm config set registry?registry.npm.taobao.org | 修改包下載源,這里修改為了淘寶鏡像。 | |
| npm root | 查看當(dāng)前包的安裝路徑。 | |
| npm root -g | 查看全局的包的安裝路徑。 | |
| npm ls 包名 | 查看本地安裝的指定包及版本信息,沒(méi)有顯示 empty。 | |
| npm ls 包名 -g | 查看全局安裝的指定包及版本信息,沒(méi)有顯示 empty。 |
二、安裝依賴(lài)
可以使用npm install命令來(lái)安裝需要的包,如果想把這個(gè)包自動(dòng)添加到package.json中,可以執(zhí)行以下命令,這里以安裝React為例:
npm install react --save如果想要安裝不同版本的包,可以這樣:
// 安裝最新版本 npm install react@latest // 安裝指定版本 npm install react@16.8.0 // 安裝指定區(qū)間版本 npm install react@">=16.8.0 <17.0.1"當(dāng)使用npm安裝依賴(lài)時(shí),分為本地安裝(local)和全局安裝(global),它倆的區(qū)別就是是否包含-g參數(shù):
?可以使用require關(guān)鍵字來(lái)引入本地安裝的包。為了避免引用模塊消失,保證依賴(lài)模塊都會(huì)出現(xiàn)在package.json中,最好在npm install 時(shí)加上--save。?
三、鎖定版本
當(dāng)使用--save來(lái)安裝依賴(lài)時(shí),npm 會(huì)把這個(gè)依賴(lài)保存起來(lái),并添加^前綴,他表示,當(dāng)再次執(zhí)行 npm install 命令時(shí),會(huì)自動(dòng)安裝這個(gè)包在此大版本下的最新版本。如果想要修改這個(gè)功能,可以執(zhí)行以下命令:
npm config set save-prefix='~'執(zhí)行完該命令之后,就會(huì)把^符號(hào)改為~符號(hào)。當(dāng)再次安裝新模塊時(shí),就從只允許小版本的升級(jí)變成了只允許補(bǔ)丁包的升級(jí)。?
如果想要鎖定當(dāng)前的版本,可以執(zhí)行以下命令:
npm config set save-exact true這樣每次 npm install xxx --save 時(shí)就會(huì)鎖定依賴(lài)的版本號(hào),相當(dāng)于加了 --save-exact 參數(shù)。建議線上的應(yīng)用都采用這種鎖定版本號(hào)的方式。?
為了徹底的鎖定依賴(lài)的版本,讓?xiě)?yīng)用在任何機(jī)器上都安裝同樣的版本,可以執(zhí)行以下命令:
npm shrinkwrap執(zhí)行這個(gè)命令之后,就會(huì)在項(xiàng)目的根目錄產(chǎn)生一個(gè)npm-shrinkwrap.json配置文件,這里面包含了通過(guò)node_modules 計(jì)算出的模塊的依賴(lài)樹(shù)及版本。只要目錄下有 npm-shrinkwrap.json 則運(yùn)行 npm install 時(shí)就會(huì)優(yōu)先使用 npm-shrinkwrap.json 中的配置進(jìn)行安裝,沒(méi)有則使用 package.json 進(jìn)行安裝。
四、更新,卸載依賴(lài)
npm 為我們提供了更新依賴(lài)版本的命令:
npm update [package name]如果想要更新全局安裝的模塊,需要添加參數(shù) -global:
npm update -global [package name]當(dāng)執(zhí)行這兩個(gè)命令時(shí),它會(huì)先到遠(yuǎn)程倉(cāng)庫(kù)查詢最新版本,然后查詢本地版本。如果本地版本不存在,或者遠(yuǎn)程版本較新,就會(huì)安裝。?
如果想要更新該依賴(lài)包在package.json中的版本,就需要使用-S或者--save參數(shù)。需要注意的是,從npm v2.6.1 開(kāi)始,npm update只會(huì)更新頂層的模塊,而不更新依賴(lài)的依賴(lài)模塊,而之前的版本是遞歸更新的。如果想要這種效果,可以使用以下命令:
npm --depth 9999 update除了可以更新包之外,還可以刪除指定的包:
npm uninstall [package name]如果想要?jiǎng)h除全局的包,需要添加參數(shù) -global:
npm uninstall [package name] -global五、安裝可靠的依賴(lài)
可以使用 npm ci 命令來(lái)清理、安裝依賴(lài)項(xiàng)。它通常用于CI/CD等自動(dòng)化環(huán)境,使用它可以獲得可靠的依賴(lài)。
npm ci當(dāng)執(zhí)行該命令時(shí),它會(huì)先刪除本地的node_modules文件,因此它不需要去校驗(yàn)已下載文件版本與控制版本的關(guān)系,也不用校驗(yàn)是否存在最新版本的庫(kù),所以下載的速度相比npm install會(huì)更快。之后它會(huì)按照 package-lock.json 文件來(lái)安裝確切版本的依賴(lài)項(xiàng)。并且不會(huì)將這個(gè)版本寫(xiě)入package.json或者package-lock.json文件。 ?
使用該命令時(shí),需要注意:
?六、刪除重復(fù)的包
我們可以通過(guò)運(yùn)行npm dedupe命令來(lái)刪除重復(fù)的依賴(lài)項(xiàng)。該命令通過(guò)刪除重復(fù)包并在多個(gè)依賴(lài)包之間共享公共依賴(lài)項(xiàng)來(lái)簡(jiǎn)化整體的結(jié)構(gòu)。它會(huì)產(chǎn)生一個(gè)扁平的、去重的樹(shù)。
npm dedupe npm ddp可以運(yùn)行 npm audit 命令來(lái)掃描項(xiàng)目,來(lái)查找所有依賴(lài)項(xiàng)中存在的漏洞:
npm audit來(lái)看我的項(xiàng)目掃描結(jié)果:
可以運(yùn)行以下命令來(lái)自動(dòng)安裝所有易受攻擊包的補(bǔ)丁版本:
npm audit fix六、測(cè)試本地包
當(dāng)我們?cè)诒镜亻_(kāi)發(fā)npm模塊時(shí),可以使用npm link命令來(lái)將本地的npm模塊連接到對(duì)用的項(xiàng)目中去,便于對(duì)模塊進(jìn)行調(diào)試和測(cè)試。使用方式也很簡(jiǎn)單,在項(xiàng)目中執(zhí)行以下命令:
npm link執(zhí)行完該命令之后,就會(huì)為這個(gè)npm包創(chuàng)建到全局,路徑是?{prefix}/lib/node_modules/<package>,它是一個(gè)快捷方式。之后我們就可以使用以下命令來(lái)在需要這個(gè)模塊的項(xiàng)目中鏈接這個(gè)包:
npm link 模塊名這里的模塊名就是依賴(lài)包的名稱(chēng),也就是模塊包的package.json文件中的name字段值。?
如果不想繼續(xù)使用了,執(zhí)行以下命令來(lái)解除link即可:
npm unlink 模塊名總結(jié)
- 上一篇: 伤感的微信个性签名253个
- 下一篇: 一年级语文上册课文2我是什么课堂笔记课后