npm 包管理器簡介

Node包管理器(npm)是一個(gè)有Node.js官方提供的第三方包管理工具。npm是一個(gè)完全由JavaScript實(shí)現(xiàn)的命令行工具佑淀,通過Node.js執(zhí)行嘴高,因此嚴(yán)格來說它不屬于Node.js的一部分浸策。在Node0.6以前安裝完Node需要手動(dòng)安裝npm,后來包含在發(fā)行包中菲语。

在介紹NPM之前先介紹CommonJS的包規(guī)范妄辩。

CommonJS的包規(guī)范?

包結(jié)構(gòu) ?+ ?包描述文件

包結(jié)構(gòu):用于組織包中各種文件。

包描述文件:用于描述包的相關(guān)信息山上,以供外部讀取分析

包結(jié)構(gòu)

包實(shí)際上是一個(gè)存檔文件眼耀,即一個(gè)目錄直接打包為zip或tar.gz格式文件,安裝后解壓還原為目錄佩憾。完全符合CommonJS規(guī)范的包目錄應(yīng)該包含如下

package.json:包描述文件哮伟。

bin:用于存放可執(zhí)行二進(jìn)制文件的目錄

lib:用于存放JavaScript代碼的目錄。

doc:用于存放文檔的目錄

test:用于存放單元測試用例的代碼妄帘。

包描述文件

包描述文件用于表達(dá)非代碼相關(guān)的信息楞黄,它是一個(gè)JSON格式的文件----package.json,位于報(bào)的根目錄下抡驼,是包的重要組成部分鬼廓。而NPM的所有行為都與包描述文件的字段息息相關(guān)。由于CommonJS規(guī)范尚處于草案階段致盟,NPM在實(shí)踐中做了一定得取舍碎税。

CommonJS為package.json文件定義了如下一些必要的字段。

name:包的名稱馏锡,必須是唯一的雷蹂,由小寫英文字母、數(shù)字和下劃線組成杯道,不能包含空格匪煌。

description:包的簡要說明。

version:符合語義化八本識(shí)別規(guī)范的版本字符串蕉饼。

keywords:關(guān)鍵字?jǐn)?shù)組虐杯,通常用于搜索玛歌。

maintainers:維護(hù)者數(shù)組昧港,每個(gè)元素要包含name、email(可選)支子、web(可選)字段创肥。

contributors:貢獻(xiàn)者數(shù)組,格式與maintainers相同。包的作者應(yīng)該是貢獻(xiàn)者數(shù)組的第一個(gè)元素叹侄。

bugs:提交bug的地址巩搏,可以是網(wǎng)址或者電子郵件地址。

licenses:許可證數(shù)組趾代,每個(gè)元素要包含type(許可證的名稱)和url(鏈接到許可證文本的地址)字段贯底。

repositories:倉庫托管地址數(shù)組。每個(gè)元素要包含type(許可證的名稱)和url(鏈接到許可證文本的地址)字段撒强。

dependencies:包的依賴禽捆,一個(gè)關(guān)聯(lián)數(shù)組,由包名稱和版本組成飘哨。

除了必選字段外胚想,規(guī)范還定義了一部分可選字段。home芽隆、os浊服、cpu、engine胚吁、builtin牙躺、directories、implements腕扶、scripts(腳本說明對象述呐。它主要被包管理器用來安裝、編譯蕉毯、測試和卸載包)

"scripts":{

"install":"install.js",

"uninstall":"uninstall.js",

"build":"build.js",

"doc":"make-doc.js",

"test":"text.js"

}


包規(guī)范的定義可以幫助Node解決依賴包安裝的問題乓搬,而NPM正是基于該規(guī)范進(jìn)行了實(shí)現(xiàn),與包描述文件的規(guī)范匯中代虾,NPM實(shí)際上比包規(guī)范多了author进肯、bin、main和 devDependencies這4個(gè)字段棉磨。

author : 包作者江掩。

bin :一些包作者希望包作為命令行工具使用,配置好bin字段后乘瓤,通過npm install packageName -g命令可以將腳本添加到執(zhí)行路徑中环形,之后可以在命令行中直接執(zhí)行。

main:模塊引入方法require()在引入包時(shí)衙傀,會(huì)優(yōu)先檢查這個(gè)字段抬吟,并將其作為包中其余模塊的入口,如果不存在這個(gè)字段统抬,require()方法會(huì)查找包目錄下的index.js火本、index.node危队、index.json文件作為默認(rèn)入口

devDependencies:一些模塊只在開發(fā)時(shí)需要依賴,配置這個(gè)屬性钙畔,可以提示包的后續(xù)開發(fā)者安裝依賴包茫陆。


NPM 常用功能

CommonJS包規(guī)范是理論,NPM是其中的一種實(shí)現(xiàn)擎析,借助NPM簿盅,用戶可以快速安裝和管理依賴包

1.查看幫助

npm -v 查看版本?

npm 查看到幫助引導(dǎo)說明

npm help <command>可以查看具體的命令說明


2.安裝依賴包

npm install packageName

執(zhí)行該命令后,npm會(huì)在當(dāng)前目錄下創(chuàng)建node_modules目錄揍魂,然后在node_modules目錄下創(chuàng)建安裝的包目錄挪鹏,接著將包解壓到這個(gè)目錄下。

安裝好依賴包后愉烙,直接在代碼中調(diào)用require("包名")即可引入改包讨盒。require()方法在做路徑分析的時(shí)候會(huì)通過模塊路徑查找到安裝包所在的位置。

全局模式安裝? npm install packageName -g (包中含有命令行工具)

創(chuàng)建package.json文件 ?npm init

3.分析包

在使用的過程中步责,不能確認(rèn)當(dāng)前目錄下能否通過require()順利引入想要的包返顺,可以采用npm ls來分析包

這個(gè)命令可以分析當(dāng)前路徑下能夠通過模塊路徑找到的所有包,并生成依賴樹

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蔓肯,一起剝皮案震驚了整個(gè)濱河市遂鹊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蔗包,老刑警劉巖秉扑,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異调限,居然都是意外死亡舟陆,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門耻矮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秦躯,“玉大人,你說我怎么就攤上這事裆装□獬校” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵哨免,是天一觀的道長茎活。 經(jīng)常有香客問我,道長琢唾,這世上最難降的妖魔是什么载荔? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮慧耍,結(jié)果婚禮上身辨,老公的妹妹穿的比我還像新娘丐谋。我一直安慰自己芍碧,他們只是感情好煌珊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泌豆,像睡著了一般定庵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上踪危,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天蔬浙,我揣著相機(jī)與錄音,去河邊找鬼贞远。 笑死畴博,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蓝仲。 我是一名探鬼主播俱病,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼袱结!你這毒婦竟也來了亮隙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤垢夹,失蹤者是張志新(化名)和其女友劉穎溢吻,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體果元,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡促王,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了而晒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硼砰。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖欣硼,靈堂內(nèi)的尸體忽然破棺而出题翰,到底是詐尸還是另有隱情,我是刑警寧澤诈胜,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布豹障,位于F島的核電站,受9級特大地震影響焦匈,放射性物質(zhì)發(fā)生泄漏血公。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一缓熟、第九天 我趴在偏房一處隱蔽的房頂上張望累魔。 院中可真熱鬧摔笤,春花似錦、人聲如沸垦写。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梯投。三九已至命辖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間分蓖,已是汗流浹背尔艇。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留么鹤,地道東北人终娃。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像蒸甜,于是被迫代替她去往敵國和親棠耕。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

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

  • 什么是 NPM npm之于Node迅皇,就像pip之于Python,gem之于Ruby,composer之于PHP昧辽。 ...
    ihoey閱讀 6,250評論 2 36
  • 1 Node.js模塊的實(shí)現(xiàn)# 之前在網(wǎng)上查閱了許多介紹Node.js的文章,可惜對于Node.js的模塊機(jī)制大都...
    七寸知架構(gòu)閱讀 2,060評論 1 50
  • JavaScript 模塊化編程 網(wǎng)站越來越復(fù)雜,js代碼登颓、js文件也越來越多搅荞,會(huì)遇到什么問題? 命名沖突框咙; 文件...
    magic_pill閱讀 1,423評論 0 1
  • 1 Node.js模塊的實(shí)現(xiàn) 之前在網(wǎng)上查閱了許多介紹Node.js的文章,可惜對于Node.js的模塊機(jī)制大都著...
    zlx_2017閱讀 1,241評論 0 1
  • 吃的啥呀咕痛,吃好一點(diǎn),別整天算計(jì)喇嘱,別以為春天來了就急著脫衣服茉贡,一早一晚的注意點(diǎn)哈,沒事掛了吧者铜,改天再打電話腔丧,掛了吧,...
    b379ea924164閱讀 148評論 0 0