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)前路徑下能夠通過模塊路徑找到的所有包,并生成依賴樹