Node.js包管理器npm的具體使用
目的
目前的Node.js安裝包中都帶有一個(gè)重要的工具 包管理器npm 。npm主要有兩方面功能:下載管理第三方模塊;構(gòu)建與運(yùn)行項(xiàng)目。npm使用本身并不復(fù)雜,但是在大陸的網(wǎng)絡(luò)環(huán)境下使用并不省心,徒增許多工作量。這篇文章將對相關(guān)內(nèi)容做個(gè)說明。
npm init 與 package.json文件
Node.js的項(xiàng)目根目錄下通常會有一個(gè) package.json 文件,該文件主要配置項(xiàng)目相關(guān)的信息,包括項(xiàng)目名稱、版本號、入口文件、需要的模塊等信息。該文件可以手動(dòng)建立,不過通常都是用 npm init 命令來生成的(也可以使用 npm init -y 跳過詢問階段生成帶默認(rèn)參數(shù)的package.json文件):

通常 package.json 文件中都會包含很多字段,比如下面這樣的:
{
"name": "naisu",
"version": "1.0.0",
"description": "lalala",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "nx",
"license": "ISC",
"dependencies": {
"electron-squirrel-startup": "^1.0.0",
"serialport": "^9.2.4"
},
"devDependencies": {
"electron": "15.1.1",
"electron-rebuild": "^3.2.3"
}
}
其中有些字段是相對比較重要的,相關(guān)說明如下:
name 項(xiàng)目名稱
version 項(xiàng)目版本號
main 項(xiàng)目主入口文件
scripts npm run 命令腳本
比如上面配置了 "start": "node index.js" ,那我們就可以在終端中用 npm run start 來執(zhí)行 node index.js 命令(start/stop/test/restart這四個(gè)命令可以省略run),這在需要執(zhí)行復(fù)雜命令的時(shí)候很好用;
dependencies 項(xiàng)目運(yùn)行所依賴的模塊
devDependencies 項(xiàng)目開發(fā)所需要的模塊
這兩個(gè)字段保存了項(xiàng)目所依賴的模塊名稱和版本,有這個(gè)信息后就可以使用 npm install 來安裝這些模塊到項(xiàng)目中了 ;
模塊安裝與管理
安裝模塊
模塊安裝使用 npm install <packageName> 方式,比如下面演示中安裝了 cowsay 模塊:

npm在安裝模塊的時(shí)候會同時(shí)安裝該模塊所依賴的模塊,默認(rèn)情況下會安裝在目錄下的 node_modules 文件夾中,安裝的模塊會記錄在 package.json 文件的 dependencies 字段中,同時(shí)會在 package-lock.json 文件中記錄模塊與依賴的模塊的版本信息。
安裝時(shí)模塊名稱后可以加上 @版本號 來安裝指定版本,如 npm install cowsay@1.5.0 。
如果一個(gè)模塊已安裝了,再次執(zhí)行安裝命令的時(shí)候?qū)⒉粫匦掳惭b,可以使用 -f 或 --force 選項(xiàng) 強(qiáng)制安裝來處理: npm install --force <packageName> 。
在安裝時(shí)可以使用 -S 或 --save 選項(xiàng)將模塊標(biāo)記為 dependencies 項(xiàng)目運(yùn)行所依賴的模塊(默認(rèn)值);也可以使用 -D 或 --save-dev 選項(xiàng)將模塊標(biāo)記為 devDependencies 項(xiàng)目開發(fā)所需要的模塊,如 npm install --save-dev <packageName> 。
模塊也可以使用 -g 或 --global 選項(xiàng)安裝到全局目錄,如 npm install --global <packageName> 。
安裝模塊命令中的 install 也可以簡寫為 i 使用。
查看已安裝模塊
使用 npm list 可以查看當(dāng)前目錄已安裝的模塊及其依賴關(guān)系。
使用 -g 或 --global 選項(xiàng)可以查看全局安裝的模塊信息,使用 --depth=x 可以指定查看深度。

更新模塊
使用 npm update <packageName> 可以用來更新模塊,上面提到的 --save --save-dev --global 等選項(xiàng)在這里也可以用。
刪除模塊
使用 npm uninstall <packageName> 可以卸載模塊。
使用 -g 或 --global 選項(xiàng)可以卸載全局模塊。
npx
npx是新版本的npm(自 5.2 起)中帶的一個(gè)工具,主要是用來運(yùn)行模塊的:如果項(xiàng)目目錄或是系統(tǒng)環(huán)境中有該模塊的話直接運(yùn)行該模塊,如果沒有的話會也不用安裝,npx會將它下載到一個(gè)臨時(shí)目錄中再運(yùn)行。

模塊編譯
有的第三方模塊是用其它語言開發(fā)的,這些模塊不能直接運(yùn)行,需要針對運(yùn)行環(huán)境進(jìn)行編譯后才能使用,這就需要編譯工具了,最常見的比如 node-gyp 和 node-pre-gyp 工具。對于某些模塊在某些平臺上可能還需要一些其它的工具,比如在windows平臺上經(jīng)常會需要用到 windows-build-tools 這個(gè)工具。
這些工具都可以在用到的時(shí)候再安裝進(jìn)行編譯,多數(shù)時(shí)候npm會自動(dòng)處理這些事情。有的平臺也可以在安裝Node.js時(shí)安裝這些工具,比如在windows平臺上可以在安裝Node.js時(shí)勾選安裝這些工具:

它會在安裝完Node.js后接著安裝這些工具:


如果一開始安裝Node.js的時(shí)候沒有勾選這個(gè)也沒事,重新安裝下也可以。
版本控制
在前面出現(xiàn)的 package.json 和 package-lock.json 文件中都記錄了模塊相關(guān)信息,其中一個(gè)重要的信息就是模塊的版本號。
Node.js中模塊或項(xiàng)目的版本號由以點(diǎn)分隔的三個(gè)數(shù)字組成,從左到右依次為 主版本 、 次版本 、 補(bǔ)丁版本 。
版本號規(guī)則本身沒什么特別的,不過在npm管理和 package.json 、 package-lock.json 兩個(gè)文件中版本號前后有很多修飾符,這些符號規(guī)定了模塊在安裝、更新時(shí)的規(guī)則,常見的規(guī)則如下:
- 無任何修飾:指定特定版本,如 2.2.3 ;
latest:使用可用的最新版本;^:只會執(zhí)行不更改最左邊非零數(shù)字的更新;~:只會更新補(bǔ)丁版本;>:接受高于指定版本的任何版本;<:接受低于指定版本的任何版本;=:接受確切的版本,可以和<>組合使用;-:接受一定范圍的版本,如 2.1.0 - 2.6.2 ;||:組合,如 < 2.1 || > 2.6 ;
換源
在大陸的網(wǎng)絡(luò)環(huán)境下經(jīng)常會配到模塊下載安裝出錯(cuò)或是失敗,導(dǎo)致程序無法正確運(yùn)行,可以嘗試下面步驟重新安裝:
- 清除緩存
npm cache clean --force; - 刪除
node_modules文件夾及其中內(nèi)容; - 如果有
package-lock.json文件也可以刪除它(記得備份); - 重新安裝模塊(有 package.json 文件的話只要
npm install就可以一步安裝所有模塊);
如果上面方式不管用,并且沒有梯子或是梯子也不管用的話就只能嘗試換源了。
使用 nrm 工具換源
npm換源最方便的就是使用 nrm 工具了,可以使用 npm install -g nrm 全局安裝,當(dāng)然也可以直接使用 npx nrm 來使用。 nrm 常用操作主要就下面這些:
nrm ls列出可用源與地址;nrm test測試可用源速度;nrm use <registry>切換源;add <registry> <url>添加源;del <registry>刪除源;

使用 cnpm 代替 npm
cnpm 可以用來代替 npm 的大部分工作,但它使用的是淘寶的鏡像源,詳細(xì)可見: https://npmmirror.com/
可以使用 npm install -g cnpm --registry=https://registry.npmmirror.com 來安裝 cnpm 。之后使用的時(shí)候只要把原本需要 npm 的地方換成 cnpm 就行了。
總結(jié)
Node.js開發(fā)基本離不開npm工具,不過npm使用也簡單,遇到主要的問題可能就是網(wǎng)絡(luò)問題了。
Node.js中包管理工具除了npm和上面的cnpm外常見的還有Yarn,具體信息可以參考其官方鏈接:https://classic.yarnpkg.com/lang/en/
到此這篇關(guān)于Node.js包管理器npm的具體使用的文章就介紹到這了,更多相關(guān)Node.js包管理器npm內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
NPM配置私服構(gòu)建內(nèi)網(wǎng)中央倉庫過程詳解
這篇文章主要為大家介紹了NPM配置私服構(gòu)建內(nèi)網(wǎng)中央倉庫過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Node.js?使用?zlib?內(nèi)置模塊進(jìn)行?gzip?壓縮
這篇文章主要介紹了Node.js?使用?zlib?內(nèi)置模塊進(jìn)行?gzip?壓縮,nodejs為我們提供了一個(gè)zlib內(nèi)置模塊,我們可以使用它其中的gzip方法來對傳遞的數(shù)據(jù)進(jìn)行壓縮,從而提高數(shù)據(jù)傳遞效率,更多相關(guān)內(nèi)容需要的朋友可以參考一下2022-09-09
Node使用koa2實(shí)現(xiàn)一個(gè)簡單JWT鑒權(quán)的方法
這篇文章主要介紹了Node使用koa2實(shí)現(xiàn)一個(gè)簡單JWT鑒權(quán)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
利用Node.js和MySQL實(shí)現(xiàn)創(chuàng)建API服務(wù)器
這篇文章主要為大家詳細(xì)介紹了如何使用Node.js和MySQL創(chuàng)建API服務(wù)器的步驟,這也是從前端邁向全棧的一個(gè)開始,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2024-01-01
Node.js中的EventEmitter類使用小結(jié)
EventEmitter 是 Node.js 中的一個(gè)核心模塊,它提供了一種實(shí)現(xiàn)事件驅(qū)動(dòng)編程的機(jī)制,它是一個(gè)基于觀察者模式的類,用于在應(yīng)用程序中處理事件和觸發(fā)事件,這篇文章主要介紹了Node.js中的EventEmitter類介紹,需要的朋友可以參考下2023-12-12
node.js 基于 STMP 協(xié)議和 EWS 協(xié)議發(fā)送郵件
這篇文章主要介紹了node.js 基于 STMP 協(xié)議和 EWS 協(xié)議發(fā)送郵件的示例,幫助大家更好的理解和使用node.js,感興趣的朋友可以了解下2021-02-02

