NPM基礎(chǔ)小結(jié)

timg.jpeg

nodejs的出現(xiàn)盲镶,可以算是前端里程碑式的一個(gè)事件,它讓前端攻城獅們擺脫了瀏覽器的束縛蝌诡,踏上了一個(gè)更加寬廣的舞臺(tái)溉贿。前端的可能性,從此更加具有想象空間浦旱。

隨著一系列基于nodejs的應(yīng)用/工具的出現(xiàn)宇色,工作中與nodejs打交道的機(jī)會(huì)越來越多。無論在node應(yīng)用的開發(fā)颁湖,還是使用中宣蠕,包管理都扮演著一個(gè)很重要的作用。NPM(node package manager)甥捺,作為node的包管理工具抢蚀,極大地便利了我們的開發(fā)工作,很有必要了解一下镰禾。

NPM是什么

NPM(node package manager)皿曲,通常稱為node包管理器唱逢。顧名思義,它的主要功能就是管理node包屋休,包括:安裝坞古、卸載、更新劫樟、查看痪枫、搜索、發(fā)布等叠艳。
npm的背后听怕,是基于couchdb的一個(gè)數(shù)據(jù)庫,詳細(xì)記錄了每個(gè)包的信息虑绵,包括作者尿瞭、版本、依賴翅睛、授權(quán)信息等声搁。它的一個(gè)很重要的作用就是:將開發(fā)者從繁瑣的包管理工作(版本、依賴等)中解放出來捕发,更加專注于功能的開發(fā)疏旨。
npm官網(wǎng):https://npmjs.org/
npm官方文檔:https://npmjs.org/doc/README.html

我們需要了解什么

npm的安裝、卸載扎酷、升級妒挎、配置
npm的使用:package的安裝、卸載尸红、升級兄旬、查看、搜索凡纳、發(fā)布
npm包的安裝模式:本地 vs 全局
package.json:包描述信息
package版本:常見版本聲明形式

npm包安裝模式

在具體介紹npm包的管理之前窃植,我們首先得來了解一下npm包的兩種安裝模式。

本地安裝 vs 全局安裝(重要)
node包的安裝分兩種:本地安裝荐糜、全局安裝巷怜。兩者的區(qū)別如下,后面會(huì)通過簡單例子說明
本地安裝:package會(huì)被下載到當(dāng)前所在目錄暴氏,也只能在當(dāng)前目錄下使用延塑。
全局安裝:package會(huì)被下載到到特定的系統(tǒng)目錄下,安裝的package能夠在所有目錄下使用答渔。

npm install pkg - 本地安裝

運(yùn)行如下命令关带,就會(huì)在當(dāng)前目錄下安裝grunt-cli(grunt命令行工具)

npm install grunt-cli

安裝結(jié)束后,當(dāng)前目錄下回多出一個(gè)node_modules
目錄研儒,grunt-cli就安裝在里面豫缨。同時(shí)注意控制臺(tái)輸出的信息:

[grunt-cli@0.1.9](mailto:grunt-cli@0.1.9) node_modules/grunt-cli
├── [resolve@0.3.1](mailto:resolve@0.3.1)
├── [nopt@1.0.10](mailto:nopt@1.0.10) ([abbrev@1.0.4](mailto:abbrev@1.0.4))
└── [findup-sync@0.1.2](mailto:findup-sync@0.1.2) ([lodash@1.0.1](mailto:lodash@1.0.1), [glob@3.1.21](mailto:glob@3.1.21))

簡單說明一下:

grunt-cli@0.1.9:當(dāng)前安裝的packagegrunt-cli独令,版本為0.19
node_modules/grunt-cli:安裝目錄
resolve@0.3.1:依賴的包有resolvenopt好芭、findup-sync燃箭,它們各自的版本、依賴在后面的括號里列出來

npm install -g pkg- 全局安裝

上面已經(jīng)安裝了grunt-cli舍败,然后你跑到其他目錄下面運(yùn)行如下命令

grunt

果斷提示你grunt命令不存在招狸,為什么呢?因?yàn)樯厦嬷皇沁M(jìn)行了本地安裝邻薯,grunt命令只能在對應(yīng)安裝目錄下使用裙戏。

-bash: grunt: command not found

如果為了使用grunt命令,每到一個(gè)目錄下都得重新安裝一次厕诡,那不抓狂才怪累榜。腫么辦呢?
很簡單灵嫌,采用全局安裝就行了壹罚,很簡單,加上參數(shù)-g
就可以了

npm install -g grunt-cli

于是寿羞,在所有目錄下都可以無壓力使用grunt命令了猖凛。這個(gè)時(shí)候,你會(huì)注意到控制臺(tái)輸入的信息有點(diǎn)不同绪穆。主要的區(qū)別在于安裝目錄辨泳,現(xiàn)在變成了

/usr/local/lib/node_modules/grunt-cli
,/usr/local/lib/node_modules/

也就是之前所說的全局安裝目錄啦玖院。

[grunt-cli@0.1.9](mailto:grunt-cli@0.1.9) /usr/local/lib/node_modules/grunt-cli
├── [resolve@0.3.1](mailto:resolve@0.3.1)
├── [nopt@1.0.10](mailto:nopt@1.0.10) ([abbrev@1.0.4](mailto:abbrev@1.0.4))
└── [findup-sync@0.1.2](mailto:findup-sync@0.1.2) ([lodash@1.0.1](mailto:lodash@1.0.1), [glob@3.1.21](mailto:glob@3.1.21))

npm包管理

npm的包管理命令是使用頻率最高的菠红,所以也是我們需要牢牢記住并熟練使用的。其實(shí)無非也就是幾個(gè)動(dòng)作:安裝司恳、卸載途乃、更新、查看扔傅、搜索、發(fā)布等烫饼。
安裝最新版本的grunt-cli

npm install grunt-cli

安裝0.1.9版本的grunt-cli

npm install [grunt-cli@"0.1.9](mailto:grunt-cli@%220.1.9)"

通過package.json進(jìn)行安裝
如果我們的項(xiàng)目依賴了很多package猎塞,一個(gè)一個(gè)地安裝那將是個(gè)體力活。我們可以將項(xiàng)目依賴的包都在package.json這個(gè)文件里聲明杠纵,然后一行命令搞定

npm install

其他package安裝命令

運(yùn)行如下命令荠耽,列出所有npm install
可能的參數(shù)形式

npm install --help

輸出如下,有興趣的童鞋可以了解下

npm install <tarball file>

npm install <tarball url>

npm install <folder>

npm install <pkg>

npm install <pkg>@<tag>

npm install <pkg>@<version>

npm install <pkg>@<version range>

卸載grunt-cli
比如卸載grunt-cli

npm uninstall grunt-cli

卸載0.1.9版本的grunt-cli

npm uninstall [grunt-cli@"0.1.9](mailto:grunt-cli@%220.1.9)"

npm ls:查看安裝了哪些包
運(yùn)行如下命令比藻,就可以查看當(dāng)前目錄安裝了哪些package

npm ls

輸出如下

/private/tmp/npm

└─┬ [grunt-cli@0.1.9](mailto:grunt-cli@0.1.9)

  ├─┬ [findup-sync@0.1.2](mailto:findup-sync@0.1.2)

  │ ├─┬ [glob@3.1.21](mailto:glob@3.1.21)

  │ │ ├── [graceful-fs@1.2.3](mailto:graceful-fs@1.2.3)

  │ │ ├── [inherits@1.0.0](mailto:inherits@1.0.0)

  │ │ └─┬ [minimatch@0.2.12](mailto:minimatch@0.2.12)

  │ │   ├── [lru-cache@2.3.0](mailto:lru-cache@2.3.0)

  │ │   └── [sigmund@1.0.0](mailto:sigmund@1.0.0)

  │ └── [lodash@1.0.1](mailto:lodash@1.0.1)

  ├─┬ [nopt@1.0.10](mailto:nopt@1.0.10)

  │ └── [abbrev@1.0.4](mailto:abbrev@1.0.4)

  └── [resolve@0.3.1](mailto:resolve@0.3.1)

輸出如下铝量,同樣倘屹,如果是要查看package的全局安裝信息,加上-g
就可以
npm ls pkg:查看特定package的信息
運(yùn)行如下命令慢叨,輸出grunt-cli的信息

npm ls grunt-cli

輸出的信息比較有限纽匙,只有安裝目錄、版本拍谐,如下:

/private/tmp/npm

└── [grunt-cli@0.1.9](mailto:grunt-cli@0.1.9) 

如果要查看更詳細(xì)信息烛缔,可以通過npm info pkg
,輸出的信息非常詳盡轩拨,包括作者践瓷、版本、依賴等亡蓉。
npm info grunt-cli

npm update pkg:package更新
npm update grunt-cli

npm search pgk:搜索

輸入如下命令

npm search grunt-cli

返回結(jié)果如下

npm http GET [http://registry.npmjs.org/-/all/since?stale=update_after&startkey=1375519407838](http://registry.npmjs.org/-/all/since?stale=update_after&startkey=1375519407838)

npm http 200 [http://registry.npmjs.org/-/all/since?stale=update_after&startkey=1375519407838](http://registry.npmjs.org/-/all/since?stale=update_after&startkey=1375519407838)

NAME                  DESCRIPTION                                        AUTHOR            DATE              KEYWORDS

grunt-cli             The grunt command line interface.                  =cowboy =tkellen  2013-07-27 02:24

grunt-cli-dev-exitprocess The grunt command line interface.              =dnevnik          2013-03-11 16:19

grunt-client-compiler Grunt wrapper for client-compiler.                 =rubenv           2013-03-26 09:15  gruntplugin

grunt-clientside      Generate clientside js code from CommonJS modules  =jga              2012-11-07 01:20  gruntplugin

NPM發(fā)布

這個(gè)命令我自己也還沒實(shí)際用過晕翠,不誤導(dǎo)大家,語法如下砍濒,也可參考官方對于package發(fā)布的說明https://npmjs.org/doc/developers.html

npm publish <tarball>

npm publish <folder>

NPM配置

npm的配置工作主要是通過npm config
命令淋肾,主要包含增、刪梯影、改巫员、查幾個(gè)步驟,下面就以最為常用的proxy配置為例甲棍。

設(shè)置proxy
內(nèi)網(wǎng)使用npm很頭痛的一個(gè)問題就是代理简识,假設(shè)我們的代理是 http://proxy.example.com:8080,那么命令如下:

npm config set proxy http://proxy.example.com:8080

由于npm config set
命令比較常用感猛,于是可以如下簡寫

npm set proxy http://proxy.example.com:8080 

查看proxy
設(shè)置完七扰,我們查看下當(dāng)前代理設(shè)置

npm config get proxy

輸出如下:

http://proxy.example.com:8080/

同樣可如下簡寫:

npm get proxy

刪除proxy
代理不需要用到了,那刪了吧

npm delete proxy

查看所有配置

npm config list

直接修改配置文件
有時(shí)候覺得一條配置一條配置地修改有些麻煩陪白,就直接進(jìn)配置文件修改了

npm config edit

關(guān)于package.json

這貨在官網(wǎng)似乎沒有詳細(xì)的描述颈走,其實(shí)就是包的描述信息啦。假設(shè)當(dāng)我們下載了node應(yīng)用咱士,這個(gè)node應(yīng)用依賴于A立由、B、C三個(gè)包序厉,如果沒有package.json锐膜,我們需要人肉安裝這個(gè)三個(gè)包(如果對版本有特定要求就更悲劇了):

npm install A

npm install B

npm install C

有了package.json,一行命令安裝所有依賴弛房。

npm install

package.json字段簡介
字段相當(dāng)多道盏,但最重要的的是下面幾個(gè)
name: package的名字(由于他會(huì)成為url的一部分,所以 non-url-safe 的字母不會(huì)通過,也不允許出現(xiàn)"."荷逞、"_")媒咳,最好先在http://registry.npmjs.org/上搜下你取的名字是否已經(jīng)存在

version: package的版本,當(dāng)package發(fā)生變化時(shí)种远,version也應(yīng)該跟著一起變化涩澡,同時(shí),你聲明的版本需要通過semver的校驗(yàn)(semver可自行谷歌)
dependencies: package的應(yīng)用依賴模塊院促,即別人要使用這個(gè)package筏养,至少需要安裝哪些東東。應(yīng)用依賴模塊會(huì)安裝到當(dāng)前模塊的node_modules目錄下常拓。
devDependenciespackage的開發(fā)依賴模塊渐溶,即別人要在這個(gè)package上進(jìn)行開發(fā)
其他:參見官網(wǎng)

package版本

package.json里,你經(jīng)常會(huì)在包名后看到類似"~0.1.0"這樣的字符串弄抬,這就是包的版本啦茎辐。下面會(huì)列舉最常見的版本聲明形式,以及版本書寫的要求:
常見版本聲明形式
a掂恕、"~1.2.3"是神馬意思呢拖陆,看下面領(lǐng)悟

"~1.2.3" = ">=1.2.3 <1.3.0"

"~1.2" = ">=1.2.0 <1.3.0"

"~1" = ">=1.0.0 <1.1.0"

b、"1.x.x"是什么意思呢懊亡,繼續(xù)自行領(lǐng)悟

"1.2.x" = ">=1.2.0 <1.3.0"

"1.x.x" = ">=1.0.0 <2.0.0"

"1.2" = "1.2.x"

"1.x" = "1.x.x"

"1" = "1.x.x"

版本書寫要求
版本可以v開頭依啰,比如 v1.0.1v只是可選)
1.0.1-7,這里的7是所謂的“構(gòu)建版本號”店枣,不理是神馬速警,反正版本大于1.0.1
1.0.1beta,或者1.0.1-beta鸯两,如果1.0.1后面不是 “連字符加數(shù)字” 這種形式闷旧,那么它是pre release 版本,即版本小于1.0.1
根據(jù)b钧唐、c忙灼,有:0.1.2-7 > 0.1.2-7-beta > 0.1.2-6 > 0.1.2 > 0.1.2beta

寫在后面

內(nèi)容只是簡單地把最常見的命令,以及一些需要了解的內(nèi)容列了出來钝侠。如要進(jìn)一步了解该园,可參考官網(wǎng)說明。此外:

npm help

是我們最好的朋友帅韧,如果忘了有哪些命令爬范,命令下有哪些參數(shù),可通過help進(jìn)行查看弱匪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子萧诫,更是在濱河造成了極大的恐慌斥难,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帘饶,死亡現(xiàn)場離奇詭異哑诊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)及刻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門镀裤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缴饭,你說我怎么就攤上這事暑劝。” “怎么了颗搂?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵担猛,是天一觀的道長。 經(jīng)常有香客問我丢氢,道長傅联,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任疚察,我火速辦了婚禮蒸走,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘貌嫡。我一直安慰自己比驻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布衅枫。 她就那樣靜靜地躺著嫁艇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弦撩。 梳的紋絲不亂的頭發(fā)上步咪,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機(jī)與錄音益楼,去河邊找鬼猾漫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛感凤,可吹牛的內(nèi)容都是我干的悯周。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼陪竿,長吁一口氣:“原來是場噩夢啊……” “哼禽翼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤闰挡,失蹤者是張志新(化名)和其女友劉穎锐墙,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體长酗,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溪北,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夺脾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片之拨。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖咧叭,靈堂內(nèi)的尸體忽然破棺而出蚀乔,到底是詐尸還是另有隱情,我是刑警寧澤佳簸,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布乙墙,位于F島的核電站,受9級特大地震影響生均,放射性物質(zhì)發(fā)生泄漏听想。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一马胧、第九天 我趴在偏房一處隱蔽的房頂上張望汉买。 院中可真熱鬧,春花似錦佩脊、人聲如沸蛙粘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽出牧。三九已至,卻和暖如春歇盼,著一層夾襖步出監(jiān)牢的瞬間舔痕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工豹缀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留伯复,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓邢笙,卻偏偏與公主長得像啸如,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子氮惯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

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

  • 1、什么是NPM? NPM(node package manager),通常稱為node包管理器债鸡,主要功能就是管理...
    皆為序幕__so閱讀 8,866評論 0 2
  • Nodejs的出現(xiàn)江滨,可以算是前端里程碑式的一個(gè)事件,它讓前端攻城獅們擺脫了瀏覽器的束縛厌均,踏上了一個(gè)更加寬廣的舞臺(tái)。...
    彬_仔閱讀 2,708評論 0 3
  • 快速入門 Grunt和 Grunt 插件是通過 npm 安裝并管理的告唆,npm是 Node.js 的包管理器棺弊。Gru...
  • Node.js使得在服務(wù)器端使用JavaScript編寫應(yīng)用程序成為可能。它是基于V8Javascript運(yùn)行時(shí)并...
    間陽幕賓閱讀 1,574評論 0 5
  • 秋日 秋思不絕 秋日 瞌睡連連 秋日與眾人互道 中秋快樂 秋日遠(yuǎn)游 與水翁言老 與沙粒擒悬,茫茫無盡的海水 互道早安 ...
    公子九月回閱讀 203評論 0 1