Node.js學(xué)習(xí)-NPM

npmjs.com說:npm能讓javascript開發(fā)人員發(fā)布代碼和復(fù)用代碼變得更容易.并別能非常容易的讓別人將你發(fā)布的代碼同步到最新版本。

npm是一個包管理工具,就像arch下的pacman 划咐、 debian系下的apt-get 熟史、以及基于RPM包的yum 如CentOS、RedHat肋殴,它能幫我們自動處理軟件包的以來關(guān)系囤锉,以及軟件包的安裝和卸載提供更簡便的操作,讓使用者最少的關(guān)心與軟件使用無關(guān)的東西护锤。最開始npm只是用來管理node項目代碼的官地,現(xiàn)在已經(jīng)可以管理很多其他語言代碼了。

npm 安裝

學(xué)習(xí)環(huán)境:

Linux arch 4.8.2-1-ARCH #1

運行:

curl -L https://npmjs.org/install.sh | sh

通常運行上面命令都會失敗烙懦,如果你沒有變更過linux下權(quán)限配置驱入,都會因為權(quán)限不能執(zhí)行sh命令
所以, curl下載并執(zhí)行安裝命令可能需要變更為:

curl -L https://npmjs.org/install.sh | sudo sh

不出意外就可以順利安裝了,可能需要耐心等待一會兒氯析,因為npm默認(rèn)使用了國外鏡像亏较,數(shù)據(jù)包路由可能需要更多時間。

安裝結(jié)束后掩缓,可以使用如下命令校驗是否安裝成功:

[palm@arch]: ~/Desktop/node-stu/stunode>$ npm

Usage: npm <command>

where <command> is one of:
    access, adduser, bin, bugs, c, cache, completion, config,
    ddp, dedupe, deprecate, dist-tag, docs, edit, explore, get,
    help, help-search, i, init, install, install-test, it, link,
    list, ln, login, logout, ls, outdated, owner, pack, ping,
    prefix, prune, publish, rb, rebuild, repo, restart, root,
    run, run-script, s, se, search, set, shrinkwrap, star,
    stars, start, stop, t, tag, team, test, tst, un, uninstall,
    unpublish, unstar, up, update, v, version, view, whoami

npm <cmd> -h     quick help on <cmd>
npm -l           display full usage info
npm help <term>  search for help on <term>
npm help npm     involved overview

Specify configs in the ini-formatted file:
    /home/palm/.npmrc
or on the command line via: npm <command> --key value
Config info can be viewed via: npm help config

npm@3.10.9 /usr/lib/node_modules/npm

上面輸出信息表示已經(jīng)成功安裝了npm雪情,已經(jīng)可以使用了。npm一些簡單的使用如下:

  • npm -v 查看當(dāng)前npm版本
[palm@arch]: ~/Desktop/node-stu/stunode>$ npm -v
3.10.9
  • npm --help / npm man npm幫助你辣,如果你忽然忘記了npm某一個命令使用可以通過這兩個命令查找對應(yīng)命令描述巡通,如:
[palm@arch]: ~/Desktop/node-stu/stunode>$ npm --help install

npm install (with no args, in package dir)
npm install [<@scope>/]<pkg>
npm install [<@scope>/]<pkg>@<tag>
npm install [<@scope>/]<pkg>@<version>
npm install [<@scope>/]<pkg>@<version range>
npm install <folder>
npm install <tarball file>
npm install <tarball url>
npm install <git:// url>
npm install <github username>/<github project>

aliases: i, isntall
common options: [--save|--save-dev|--save-optional] [--save-exact]
  • npm install

npm install <package_name>

使用這個命令尘执,npm會幫助我們下載 #package_name默認(rèn)到當(dāng)前的node_modules 目錄下,如果沒有這個目錄宴凉,npm會自動創(chuàng)建誊锭。這種安裝方式是本地安裝,換一種說法弥锄,被安裝的軟件包(#package_name) 只是在當(dāng)前所在project下生效丧靡。如果需要全局使用可以增加參數(shù) -g ,如此籽暇,就是當(dāng)前系統(tǒng)用戶下可用温治。更多信息可以使用以下命令查看:

npm help npm-folders

因為默認(rèn)npm使用了國外的源,所以图仓,可以使用追加 --registry=https: //xxx.xxx.xxx 從指定源下載該軟件包.

  • npm init 該命令會在當(dāng)前目錄下自動創(chuàng)建一個 package.json文件罐盔,并且會提示輸入一系列信息,比如包名救崔,初始版本(默認(rèn)為1.0.0)惶看, 軟件包描述,入口文件(或main文件,默認(rèn)叫index.js), 軟件測試命令,git倉庫地址以及開發(fā)者名字等等. 完畢確認(rèn)后內(nèi)容類似如下這樣:
{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "directories": {
    "test": "test"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

package.json 文件內(nèi)容必須是嚴(yán)格的json格式,不能是javascript對象,像這樣:

{
  name: "test",
  version: "1.0.0",
  description: "",
  main: "index.js",
  directories: {
    test: "test"
  },
  scripts: {
    test: "echo \"Error: no test specified\" && exit 1"
  },
  author: "",
  license: "MIT"
}

這樣的格式是錯誤的六孵。key-value中纬黎,value更不能是對象類型字面量值。 只能是字符串劫窒。

package.json 文件
package.json 能更好的幫助npm或者其他包管理工具管理軟件包本今,通過這個文件,npm可以自動下載安裝包所需要的依賴包主巍,以及run入口函數(shù)冠息,讓軟件倉庫如github等更方便的、更通用的測試軟件包是否可用孕索,同時package.json 也提供一個通用的軟件包信息讀取接口逛艰。基于這個文件搞旭,我們可以很容易的讀取到該軟件包詳細(xì)信息散怖。

package.json更多的字段描述在這里,根據(jù)習(xí)慣肄渗,如果我們提供了 README.md或者'README'文件镇眷,也可以忽description字段,這個字段是為了幫助別人在npm搜索。所以這個字段的信息翎嫡,要盡可能的對軟件有用欠动,從而使你的軟件包讓更多的人發(fā)現(xiàn)。

總之惑申,package.json已經(jīng)是npm包定義的一個不可缺少的一部分具伍。

  • npm install <package_name> --save
    --save參數(shù)是為了自動的修改package.json dependencies 字段铆遭,會自動將安裝的軟件包作為本軟件包的依賴添加到package.json文件中。這樣我們就不用去手動修改 package.json文件了沿猜,如果手動維護,忘記添加后碗脊,使用我們發(fā)布的包會出現(xiàn)缺少依賴錯誤啼肩。 栗子:
npm install express --save

可能需要等待一段時間,安裝完畢會將這個目錄樹打印到命令行窗口上衙伶,就像這樣:

test@1.0.0 /home/palm/Desktop/node-stu/test
└─┬ express@4.14.0 
  ├─┬ accepts@1.3.3 
  │ ├─┬ mime-types@2.1.12 
  │ │ └── mime-db@1.24.0 
  │ └── negotiator@0.6.1 
  ├── array-flatten@1.1.1 
  ├── content-disposition@0.5.1 
  ├── content-type@1.0.2 
  ├── cookie@0.3.1 
  ├── cookie-signature@1.0.6 
  ├─┬ debug@2.2.0 
  │ └── ms@0.7.1 
  ├── depd@1.1.0 
  ├── encodeurl@1.0.1 
  ├── escape-html@1.0.3 
  ├── etag@1.7.0 
  ├─┬ finalhandler@0.5.0 
  │ ├── statuses@1.3.0 
  │ └── unpipe@1.0.0 
  ├── fresh@0.3.0 
  ├── merge-descriptors@1.0.1 
  ├── methods@1.1.2 
  ├─┬ on-finished@2.3.0 
  │ └── ee-first@1.1.1 
  ├── parseurl@1.3.1 
  ├── path-to-regexp@0.1.7 
  ├─┬ proxy-addr@1.1.2 
  │ ├── forwarded@0.1.0 
  │ └── ipaddr.js@1.1.1 
  ├── qs@6.2.0 
  ├── range-parser@1.2.0 
  ├─┬ send@0.14.1 
  │ ├── destroy@1.0.4 
  │ ├─┬ http-errors@1.5.0 
  │ │ ├── inherits@2.0.1 
  │ │ └── setprototypeof@1.0.1 
  │ └── mime@1.3.4 
  ├── serve-static@1.11.1 
  ├─┬ type-is@1.6.13 
  │ └── media-typer@0.3.0 
  ├── utils-merge@1.0.0 
  └── vary@1.1.0 

查看項目根目錄下文件祈坠,多了一個 node_modules(如果你沒有新建該目錄的話):
查看目錄node_modules ,express 軟件包的依賴都自動下載到該目錄下了,linux下可以使用命令

ls node_modules/

查看依賴包是否有遺漏矢劲。查看package.json文件赦拘,發(fā)現(xiàn)有新增節(jié)點dependencies,如:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.14.0"
  }
}

更多npm使用在這里芬沉, 比如: 包本地/全局卸載躺同、包依賴更新等等

npm也提到了自己提倡的coding-style,比如丸逸,經(jīng)程R眨看見的比較混亂的{前是否需要換行,在c語言中黄刚,一般都是這樣:

int fun(int x, int y) 
{
  return x + y ;
}

而在javajavascript中是這樣的:

public int add(int x, int y) {
  return x + y ;
}
function fun(x,y) {
  return x + y ;
}

npm 提倡使用上面javascript代碼風(fēng)格, 如:

//bad
function()
{
  //
}

//good
function() {
  //
}

個人也非常推薦npm的 coding-style捎谨,甚至非常排斥c語言代碼風(fēng)格在javascript上使用,不僅僅是因為大部分javascript解釋引擎自動在語句末尾添加分號憔维。


----- npm學(xué)習(xí)結(jié)束

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涛救,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子业扒,更是在濱河造成了極大的恐慌检吆,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凶赁,死亡現(xiàn)場離奇詭異咧栗,居然都是意外死亡,警方通過查閱死者的電腦和手機虱肄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門致板,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咏窿,你說我怎么就攤上這事斟或。” “怎么了集嵌?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵萝挤,是天一觀的道長御毅。 經(jīng)常有香客問我,道長怜珍,這世上最難降的妖魔是什么端蛆? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮酥泛,結(jié)果婚禮上今豆,老公的妹妹穿的比我還像新娘。我一直安慰自己柔袁,他們只是感情好呆躲,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捶索,像睡著了一般插掂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上腥例,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天辅甥,我揣著相機與錄音,去河邊找鬼院崇。 笑死肆氓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的底瓣。 我是一名探鬼主播谢揪,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼捐凭!你這毒婦竟也來了拨扶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤茁肠,失蹤者是張志新(化名)和其女友劉穎患民,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垦梆,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡匹颤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了托猩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片印蓖。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖京腥,靈堂內(nèi)的尸體忽然破棺而出赦肃,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布他宛,位于F島的核電站船侧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏厅各。R本人自食惡果不足惜镜撩,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望队塘。 院中可真熱鬧琐鲁,春花似錦、人聲如沸人灼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽投放。三九已至,卻和暖如春适贸,著一層夾襖步出監(jiān)牢的瞬間灸芳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工拜姿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烙样,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓蕊肥,卻偏偏與公主長得像谒获,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子壁却,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351

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