npm常用命令及版本號(hào)

npm 包管理器的常用命令

測(cè)試環(huán)境為node>=8.1.3&&npm>=5.0.3

1, 安裝命令

//全局安裝

npm install 模塊名 -g

//本地安裝

npm install 模塊名

//一次性安裝多個(gè)

npm install 模塊1模塊2模塊3

//安裝開發(fā)時(shí)依賴包

npm install 模塊名 --save-dev

//安裝運(yùn)行時(shí)依賴包

npm install 模塊名--save

2, 查看安裝的目錄

//查看項(xiàng)目中模塊所在的目錄

npm root

//查看全局安裝的模塊所在目錄

npm root-g

3, 查看npm的所有命令命令

npm help

4,查看某個(gè)包的各種屬性

//查看某個(gè)包對(duì)于各種包的依賴關(guān)系

npm view 模塊名 dependencies

5,查看包的源文件地址

//查看包的源文件地址

npm view 模塊名repository.url

6

· 查看當(dāng)前模塊依賴的node最低版本號(hào)

npm view 模塊名 engines

· 查看模塊的當(dāng)前版本號(hào)

npm view 模塊名 version

//需要注意的是查看到的模塊版本是該模塊再遠(yuǎn)程倉(cāng)庫(kù)的版本號(hào)仍稀,并不是當(dāng)前項(xiàng)目中所依賴的版本號(hào)拳芙。

//查看當(dāng)前項(xiàng)目中應(yīng)用的某個(gè)模塊的版本號(hào)的命令為

npm list 模塊名 version

· 查看模塊的歷史版本和當(dāng)前版本

npm view 模塊名 versions

· 查看一個(gè)模塊的所有信息

npm view 模塊名

7察藐,查看npm使用的所有文件夾

npm help folders

8,用于更改包內(nèi)容后進(jìn)行重建

npm rebuild 模塊名

9舟扎,檢查包是否已經(jīng)過(guò)時(shí)

//此命令會(huì)列出所有已經(jīng)過(guò)時(shí)的包分飞,可以及時(shí)進(jìn)行包的更新

npm outdated

10,更新node模塊

npm update 模塊名

//當(dāng)然你也可以u(píng)pdate 該模塊到指定版本npm update 模塊名 @版本號(hào)

//如果安裝到最新版本可以使用以下命令npm install 模塊名@latest//如果當(dāng)前的版本號(hào)為2.5.1睹限,是沒辦法進(jìn)行npm update 模塊名 @2.3.1 將模塊版本號(hào)變?yōu)?.3.1的譬猫,當(dāng)然,你可以先uninstall羡疗,然后進(jìn)行install @2.3.1

11染服,卸載node模塊

npm uninstall 模塊名

12,訪問(wèn)package.json的字段文檔

npm help json

13叨恨,發(fā)布一個(gè)npm包的時(shí)候柳刮,需要檢驗(yàn)?zāi)硞€(gè)包名是否已經(jīng)存在

npm search 模塊名

14,npm init:引導(dǎo)你創(chuàng)建一個(gè)package.json文件,包括名稱秉颗、版本痢毒、作者這些信息

?· 清除npm的緩存

npm cache clean//慎重使用改命令

15, npm root 查看當(dāng)前包的安裝路徑,

? ? ?npm root -g 查看全局的包的安裝路徑

16蚕甥,npm -v 查看npm的版本

17哪替,查看某個(gè)模塊的bugs列表界面

npm bugs 模塊名//例如運(yùn)行npm bugs chai則會(huì)打開vue倉(cāng)庫(kù)的issue邑遏,效果如下圖

18躺彬,打開某個(gè)模塊的倉(cāng)庫(kù)界面

npm repo 模塊名

//例如運(yùn)行npm repo vue則會(huì)打開vue線上倉(cāng)庫(kù),效果如下圖

· 打開某個(gè)模塊的文檔

npm docs 模塊名

//例如運(yùn)行npm docs vue則會(huì)打開vue的readme.md文檔

· 打開某個(gè)模塊的主頁(yè)

npm home 模塊名

//例如運(yùn)行npm home vue則會(huì)打開vue模塊的主頁(yè)

· 查看當(dāng)前已經(jīng)安裝的模塊

npm list//當(dāng)然我們也可以限制輸入的模塊層級(jí)帝美,例如npm list--depth=0

· 清除未被使用到的模塊

//有時(shí)在我們使用npm list的時(shí)候敏释,可能會(huì)碰到一些問(wèn)題库快,就是有些模塊并沒有被項(xiàng)目引用使用,我們還是安裝了這些模塊钥顽,那么我們可以一鍵清除這些沒有使用到的模塊npm prune



版本控制


我們使用node開發(fā)時(shí)义屏,經(jīng)常需要依賴一些模塊,我們進(jìn)行了下載之后蜂大,便一直在該版本的模塊環(huán)境下進(jìn)行開發(fā)闽铐,但是線上的服務(wù)器一般都是根據(jù)依賴來(lái)配置文件,重新下載各個(gè)模塊奶浦,但是保不齊某個(gè)模塊的版本已經(jīng)更新了兄墅,這時(shí)線上的包會(huì)更新到最新的版本,但你的代碼還是依據(jù)老版本來(lái)寫的澳叉,這時(shí)可能會(huì)產(chǎn)生一些不知名的Bug,

首先看npm包的版本號(hào)的格式X.Y.Z,版本好的格式遵循semver 2.0規(guī)范隙咸,其中X為主版本號(hào),只有更新了不向下兼容的API時(shí)進(jìn)行修改主版本號(hào)成洗,Y為次版本號(hào)五督,當(dāng)模塊增加了向下兼容的功能時(shí)進(jìn)行修改,Z為修訂版本號(hào)瓶殃,當(dāng)模塊進(jìn)行了向下兼容的bug修改后進(jìn)行修改,這就是“語(yǔ)義化的版本控制”充包。

默認(rèn)情況下,當(dāng)用--save或者--save-dev安裝一個(gè)模塊時(shí)遥椿,npm通過(guò)脫字符(^)來(lái)限定所安裝模塊的主版本號(hào)基矮,而該脫字符對(duì)于不同的版本號(hào)有不同的更新機(jī)制

^1.2.1 代表的更新版本范圍為 >=1.2.1 && < 2.0.0

^0.2.1 代表的更新版本范圍為 >=0.2.1 && < 0.3.0

^0.0.2 代表的更新版本范圍為 0.0.2(相當(dāng)于鎖定為了0.0.2版本)

##### 對(duì)于上述字符的版本控制,我們可以來(lái)進(jìn)行一個(gè)嘗試:


首先可以看到package.json中對(duì)于vuex的版本依賴為^2.3.1

然后查看以下項(xiàng)目中安裝的vuex模塊的版本號(hào)


果然沒錯(cuò)冠场,改版本號(hào)為2.3.1家浇,接下來(lái)我們看一下vuex的歷史版本(npm view vuex versions)


可以看到2.3.1-2.5.0之后到了3.0.0,接下來(lái)運(yùn)行npm update vuex,查看以下更新后的版本


現(xiàn)在我們看到更新后的vuex版本號(hào)為2.5.0 < 3.0.0,可以驗(yàn)證第一條規(guī)范碴裙。

我們?cè)賮?lái)驗(yàn)證下主版本號(hào)為0的版本控制情況蓝谨,先將當(dāng)前項(xiàng)目依賴的vuex版本改為@0.6.1版本.

npm uninstall vuex

//卸載vuex成功

npm install vuex@0.6.1--save

//安裝vuex0.6.1版本成功

然后更新當(dāng)前項(xiàng)目中的vuex版本灌具,執(zhí)行代碼 npm update vuex

可以通過(guò)npm view vuex versions看到vuex的版本歷程,在0.6.3之上為0.7.0譬巫,所以當(dāng)使用脫字符(^)來(lái)控制版本號(hào)時(shí),當(dāng)主版本號(hào)為0督笆,即代表該模塊在快速構(gòu)建中時(shí)芦昔,更新項(xiàng)目時(shí)的版本范圍只能更新修訂版本號(hào)Z。

對(duì)于第三種情況娃肿,當(dāng)主版本和此版本都為0時(shí)咕缎,代表著該模塊處于一個(gè)極其不穩(wěn)定的狀態(tài),在執(zhí)行update時(shí)并不會(huì)進(jìn)行版本更新料扰。

波浪號(hào)(~)是限定模塊的次要版本凭豪,(以下規(guī)則測(cè)試方法同上,便不一 一測(cè)試)

~1.5.1允許安裝版本號(hào)大于1.5.1但小于1.6.0版本的模塊

~0.5.1允許安裝版本號(hào)為0.6.0

當(dāng)主版本號(hào)/次版本號(hào)/修訂版本號(hào)為X or x or *時(shí)晒杈,那么update或install是會(huì)下載該分支最新的版本號(hào)

(*)跟新或安裝模塊時(shí)會(huì)安裝>=0.0.0的最新版本

1.x 表示的更新范圍為>=1.0.0&&< 2.0.0

1.2.x 表示的更新范圍為>=1.2.0&&< 1.3.0

更多版本規(guī)范

1嫂伞,當(dāng)然我們也可以把項(xiàng)目依賴的包固定在某一個(gè)版本,強(qiáng)制大家安裝相同的依賴樹拯钻,如下所示:

npm install react--save-E//此命令會(huì)將react的版本號(hào)進(jìn)行固定帖努,但是該方式只能控制項(xiàng)目中直接依賴的包的版本,無(wú)法控制項(xiàng)目模塊中依賴的包的版本號(hào)粪般,所以這種方式也無(wú)法讓不同的使用者得到相同的依賴樹拼余。

2,此外我們還可以使用npm shrinkwrap,可以將項(xiàng)目中的模塊版本進(jìn)行精確鎖定:

這時(shí)候只需要運(yùn)行命令 npm shrinkwrap,便會(huì)產(chǎn)生一個(gè)npm-shrinkwrap.json文件亩歹,這個(gè)文件保存了所有當(dāng)前使用的依賴模塊的版本:把該文件提交到git倉(cāng)庫(kù)中匙监,這樣其他人在clone你的項(xiàng)目的時(shí)候,執(zhí)行npm install命令時(shí)小作,npm檢測(cè)到該文件中的信息會(huì)完整的還原出完全相同的依賴樹亭姥,具體的使用方法如下:

npm install--save-dev react

//安裝reactnpm prune

//清除未被使用的模塊

npm shrinkwrap

但是使用這種方法,安裝一個(gè)模塊包的方式比較繁瑣躲惰。

3致份,使用yarn我們也可以得到模塊包精確控制的結(jié)果

yarn是一個(gè)與npm兼容的node包管理器,使用它安裝npm包础拨,會(huì)自動(dòng)在項(xiàng)目目錄創(chuàng)建一個(gè)yarn.lock文件氮块,該文件包含了當(dāng)前項(xiàng)目中所安裝的依賴包的版本信息,其他人在使用yarn安裝項(xiàng)目的依賴包時(shí)就可以通過(guò)該文件創(chuàng)建一個(gè)完全相同的依賴環(huán)境诡宗。

使用方法如下:

yarn init

//使用yarn創(chuàng)建一個(gè)項(xiàng)目

yarn add 模塊名

//使用yarn 安裝一個(gè)包

//還有很多yarn命令

此外滔蝉,yarn除了可以自動(dòng)幫我們鎖定依賴包的版本,yarn還在本地緩存已經(jīng)安裝過(guò)的包塔沃,當(dāng)再次安裝時(shí)蝠引,直接從本地讀取即可。安裝速度得到大大提升。但yarn的使用需要整個(gè)團(tuán)隊(duì)都去使用螃概,還是有一定的成本的矫夯。

綜上所述,目前大多數(shù)項(xiàng)目中較為簡(jiǎn)單的使用規(guī)范吊洼,在項(xiàng)目中依賴各個(gè)模塊時(shí)训貌,對(duì)于主版本號(hào)和次版本號(hào)都為0的不穩(wěn)定的項(xiàng)目,我們可以使用精確版本(exact),對(duì)于主版本號(hào)為0次版本號(hào)不為0的模塊和主版本號(hào)不為0的模塊冒窍,使用caret Range即脫字符(^)來(lái)控制版本递沪。當(dāng)然,我們也可以對(duì)項(xiàng)目依賴模塊的版本進(jìn)行精確鎖定综液。

SemVer(Semantic Versioning) 2.0.0

SemVer是一個(gè)對(duì)npm包版本進(jìn)行規(guī)范的模塊款慨,它對(duì)于npm包的版本號(hào)有著一系列的規(guī)則,以下為摘抄自SemVer 2.0.0中的規(guī)則:

1.在版本控制環(huán)節(jié)我們已經(jīng)說(shuō)過(guò)了谬莹,模塊的版本號(hào)采用X.Y.Z的格式檩奠,且都必須為非負(fù)的正整數(shù),依次為主版本號(hào)届良、次版本號(hào)笆凌,修改版本號(hào)。

2.當(dāng)規(guī)定版本的模塊進(jìn)行發(fā)布之后士葫,對(duì)于該模塊的任何修改乞而,都必須發(fā)布新版本。

3.主版本號(hào)為0.X.Y的模塊處于開發(fā)階段慢显,模塊并不穩(wěn)定。

4.主版本號(hào)在有不向下兼容的API發(fā)布時(shí)必須修改荚藻,在主版本號(hào)遞增時(shí)屋灌,次版本號(hào)和修訂版本號(hào)必須重新歸零。

5.次版本號(hào)再有向下兼容的API發(fā)布時(shí)進(jìn)行遞增修改应狱,在模塊中有API被棄用時(shí)也必須遞增次版本號(hào)共郭,當(dāng)此版本號(hào)遞增改變時(shí),修訂版本號(hào)Z必須歸零疾呻。

6.版本的優(yōu)先級(jí)就是各個(gè)版本的排序規(guī)則除嘹,判斷版本優(yōu)先級(jí)時(shí),必須把版本號(hào)從左至右分為主版本號(hào)岸蜗、此版本號(hào)尉咕、修訂版本號(hào)、以及先行版本號(hào)來(lái)進(jìn)行比較

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末璃岳,一起剝皮案震驚了整個(gè)濱河市年缎,隨后出現(xiàn)的幾起案子悔捶,更是在濱河造成了極大的恐慌,老刑警劉巖单芜,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜕该,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡洲鸠,警方通過(guò)查閱死者的電腦和手機(jī)蛇损,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)坛怪,“玉大人,你說(shuō)我怎么就攤上這事股囊⊥嗄洌” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵稚疹,是天一觀的道長(zhǎng)居灯。 經(jīng)常有香客問(wèn)我,道長(zhǎng)内狗,這世上最難降的妖魔是什么怪嫌? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮柳沙,結(jié)果婚禮上岩灭,老公的妹妹穿的比我還像新娘。我一直安慰自己赂鲤,他們只是感情好噪径,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著数初,像睡著了一般找爱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上泡孩,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天车摄,我揣著相機(jī)與錄音,去河邊找鬼仑鸥。 笑死吮播,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锈候。 我是一名探鬼主播薄料,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼泵琳!你這毒婦竟也來(lái)了摄职?” 一聲冷哼從身側(cè)響起誊役,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谷市,沒想到半個(gè)月后蛔垢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迫悠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年鹏漆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片创泄。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡艺玲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鞠抑,到底是詐尸還是另有隱情饭聚,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布搁拙,位于F島的核電站秒梳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏箕速。R本人自食惡果不足惜酪碘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盐茎。 院中可真熱鬧兴垦,春花似錦、人聲如沸庭呜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)募谎。三九已至扶关,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間数冬,已是汗流浹背节槐。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拐纱,地道東北人铜异。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像秸架,于是被迫代替她去往敵國(guó)和親揍庄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容