這個(gè)項(xiàng)目被命名為Node.js,開發(fā)人員習(xí)慣叫它Node,Node提供了一套純事件驅(qū)動(dòng)非堵塞的工具包,用來構(gòu)建高并發(fā)應(yīng)用程序。
注意:Node可以讓你簡單的構(gòu)建快速可擴(kuò)展的網(wǎng)絡(luò)服務(wù)。
自從被Ryan Dahl介紹以后,Node受到了業(yè)界廣泛的關(guān)注。他們已經(jīng)開始用Node來部署快速并且可擴(kuò)展的網(wǎng)絡(luò)服務(wù)。Node實(shí)在太吸引人了。
一方面因?yàn)镴avaScript,JavaScript是這個(gè)星球上應(yīng)用最廣泛的編程語言,大部分Web程序員都在瀏覽器端使用過JavaScript,服務(wù)器端是它一個(gè)很自然的擴(kuò)展。
另一方面因?yàn)镹ode嬌小可愛,Node的核心函數(shù)集很小,并且現(xiàn)有的API都非常精煉,為開發(fā)人員最小化了復(fù)雜度。當(dāng)你想構(gòu)建一些更加復(fù)雜的應(yīng)用時(shí),你只用挑選,安裝一些你喜歡的第三方模塊就可以了。
還有一個(gè)讓Node如此吸引人的原因,它很容易上手,你可以在幾分鐘內(nèi)完成下載安裝,并運(yùn)行起來.
通常按照官方網(wǎng)站(http://nodejs.org)上的步驟安裝Node就可以了,它支持Windows,Linux,Macintosh以及Solaris。
在Windows上安裝Node
Node從0.6.0版本開始支持Windows,要在Windows上安裝Node,只用從Http://nodejs.org/#download下載node-v*.msi,然后雙擊運(yùn)行即可,然后你可能會(huì)遇到類似圖1-1的安全對(duì)話框。
圖1-1
單擊“運(yùn)行”按鈕,等下載完畢后會(huì)出現(xiàn)另外一個(gè)安全對(duì)話框(圖1-2),提醒你是否確定操作。
圖1-2
如果你同意,Node安裝向?qū)Ь蜁?huì)出現(xiàn)(圖1-3),點(diǎn)擊下一步Node就會(huì)開始安裝,等一小會(huì)兒就安裝完啦!見圖1-4
圖1-3
圖1-4
在Mac OS X下安裝
如果你使用Mac OS X,你可以使用安裝向?qū)戆惭bNode,首先,先到http://nodejs.org/#download下載node-v*.pkg,下載完以后雙擊運(yùn)行,你會(huì)看到安裝向?qū)У牡谝粋€(gè)對(duì)話框,見圖1-5
圖1-5
點(diǎn)“繼續(xù)”安裝,然后向?qū)?huì)要求你輸入系統(tǒng)用戶的密碼,確定后安裝就會(huì)開始,又是一小會(huì)兒,Node又安裝好啦!見圖1-6
圖1-6
用源碼安裝
如果你使用UNIX系統(tǒng),可以通過編譯源代碼來安裝。首先,你需要選擇你要安裝的Node版本,然后下載相應(yīng)的源碼并構(gòu)建,安裝運(yùn)行Node。
注意:Node依賴幾個(gè)第三方代碼庫,不過幸運(yùn)的是它們大部分已經(jīng)包含在Node發(fā)布包里了,如果你從源碼開始構(gòu)建,你需要下面兩個(gè)東西:
1.python(2.4以上版本)——隨Node發(fā)布的構(gòu)建工具需要python環(huán)境來運(yùn)行
2.libssl-dev ——如果你打算使用SSL/TLS加密,你需要安裝這個(gè),libssl是openssl工具用到的類庫,在Linux和UNIX系統(tǒng)下,你通常可以用系統(tǒng)的包管理器來安裝。libssl在Mac OS X下是預(yù)安裝的,因此如果你用Mac OS X系統(tǒng)通常就不用再安裝libssl了。
選擇Node版本
官方網(wǎng)站nodejs.org上通常有兩個(gè)不同的Node版本可以下載:穩(wěn)定版和最新版。
對(duì)于Node,版本號(hào)最小位代表這個(gè)版本的穩(wěn)定性,穩(wěn)定版本使用偶數(shù)數(shù)字(如0.2,0.4,0.6),非穩(wěn)定版本使用奇數(shù)(0.1,0.3,0.5,0.7)。
非穩(wěn)定版不僅功能上不穩(wěn)定,而且API也有可能在后續(xù)版本中改變,穩(wěn)定版中已發(fā)布的API是不會(huì)修改的。對(duì)于每個(gè)穩(wěn)定分支,新的補(bǔ)丁不僅包含bug修復(fù),也包括非穩(wěn)定版中API的修改。
除非你想測(cè)試下最新非穩(wěn)定版中的新特性,否則你應(yīng)該選擇最新的穩(wěn)定版本。非穩(wěn)定版本對(duì)Node核心團(tuán)隊(duì)來說就像用來測(cè)試新特性的戰(zhàn)場(chǎng)。
雖然,越來越多的項(xiàng)目和公司成功的在他們的產(chǎn)品中使用了Node(官網(wǎng)首頁有展示),但是你可能得學(xué)著忍受API從非穩(wěn)定版到穩(wěn)定版時(shí)發(fā)生的變化,當(dāng)然,這就是學(xué)習(xí)一門新技術(shù)的代價(jià)。
下載Node源代碼
現(xiàn)在你知道該下載哪個(gè)版本了,然后到官方網(wǎng)站http://nodejs.org找到對(duì)應(yīng)的tar包,然后復(fù)制下載鏈接,如果你使用的UNIX系統(tǒng),你的系統(tǒng)可能已經(jīng)安裝了wget,這意味著你用一句shell命令就可以下載了:
代碼如下:
$ wget http://nodejs.org/dist/v0.6.1/node-v0.6.12.tar.gz
如果你沒安裝wget,你可能需要使用curl:
代碼如下:
$ curl –O http://nodejs.org/dist/v0.6.1/node-v0.6.12.tar.gz
如果你這兩個(gè)工具都沒有安裝,你得想別的辦法把tar包下載到你的本地目錄里——比如通過瀏覽器或者通過本地網(wǎng)絡(luò)。
(本書的例子使用寫作時(shí)的最新的穩(wěn)定版:0.6.12)
構(gòu)建Node
現(xiàn)在我們有源碼了,可以用它來構(gòu)建Node的可執(zhí)行文件。首先,你需要解壓縮前面下載的tar包:
代碼如下:
$ tar xfz node-v0.6.12.tar.gz
然后進(jìn)入源碼目錄:
代碼如下:$ cd node-v0.6.12
配置:
代碼如下:$ ./configure
順利的話你會(huì)看到成功的提示:
代碼如下:'configure' finished successfully (9.278s)
然后就可以開始編譯了:
代碼如下:
$ make
編譯完畢,會(huì)有如下提示:
代碼如下:
build' finished successfully (0.734s)
安裝Node
當(dāng)構(gòu)建成,用下面的命令來安裝Node:
代碼如下:$ make install
這個(gè)操作會(huì)把Node可執(zhí)行文件復(fù)制到/user/local/bin/node
如果遇到了權(quán)限問題,在命令前面加上sudo,以root用戶執(zhí)行即可:
代碼如下:
$ sudo make install
運(yùn)行Node
現(xiàn)在已經(jīng)可以運(yùn)行Node了,你可以先簡單的體驗(yàn)一下Node的命令行交互界面(CLI:command-line interface),只需要調(diào)用Node可執(zhí)行文件就行:
代碼如下:
$ node
這個(gè)操作會(huì)啟動(dòng)Node的命令行交互界面,并等待你的輸入,輸入下面的命令來讓Node做點(diǎn)事看看:
代碼如下:
> console.log('Hello World!');
Hello World!
> undefined
也可以運(yùn)行一個(gè)JavaScript腳本文件,比如,你創(chuàng)建了一個(gè)叫hello_world.js的文件,并包含以下內(nèi)容:
代碼如下:
console.log('Hello World!');
然后用這個(gè)腳本的文件名作為第一個(gè)參數(shù)參數(shù)來調(diào)用Node可執(zhí)行文件:
代碼如下:
$ node hello_world.js
Hello World!
最后,用Ctrl+D或者Ctrl+C來退出Node命令行交互界面。
準(zhǔn)備和使用Node包管理器
到目前為止,你只能使用Node本身的語言特性和核心函數(shù),這就是為什么大多數(shù)程序平臺(tái)都有一個(gè)用來下載、安裝,管理第三方模塊的系統(tǒng),在Node里,我們使用Node包管理器(NPM: Node Package Manager)
NPM包含三部分:一個(gè)用來存放第三方包的代碼庫,一個(gè)管理本地已經(jīng)安裝包的機(jī)制,一個(gè)用來定義包依賴關(guān)系的標(biāo)準(zhǔn)。NPM提供了一個(gè)公共的注冊(cè)服務(wù),它包含了大家發(fā)布的所有包,并提供了一個(gè)命令行工具,用來下載,安裝和管理這些包。你可以按照Node的包格式標(biāo)準(zhǔn)來制定你的包或者應(yīng)用需要依賴的其他第三方包。
雖然不用了解NPM就可以開始使用Node,但是如果要用第三方包你就必須要學(xué)習(xí)它了,因?yàn)镹ode本身只提供了一些低層的API,使用第三方模塊可以大幅減少開發(fā)復(fù)雜度,不用什么都得親自編碼。NPM允許你在一個(gè)沙箱里下載和使用模塊,你可以盡情地試驗(yàn)?zāi)愀信d趣的東西,而不用擔(dān)心污染全局的包環(huán)境。
NPM和 Node以前需要獨(dú)立安裝,從0.6.0版本以后,NPM已經(jīng)包含在了Node安裝包里。
使用NPM來安裝,升級(jí)和卸載包
NPM非常強(qiáng)大,你可以用很多方式來使用,它的代碼庫集中管理了所有的公共模塊,你可以通過http://search.npmjs.org來訪問它。Node開源模塊的作者可以把自己的模塊發(fā)布到NPM上,其他人就可以用包安裝描述里的模塊名來下載,安裝這個(gè)模塊。
這部分內(nèi)容,包含一些安裝,刪除包的常用操作,知道這些足以讓你開始管理你自己應(yīng)用程序所依賴的第三方包了,雖然如此,你首先還是需要明白這些命令在“全局”和“本地”模式下的區(qū)別,以及他們是如何影響依賴關(guān)系和模塊查找的。
NPM模塊的全局和本地模式
NPM的操作主要有兩種模式:全局和本地。這兩種模式會(huì)影響包存放的目錄結(jié)構(gòu),以及Node加載包時(shí)的順序。
本地模式是NPM的默認(rèn)操作模式,在這個(gè)模式下,NPM只工作在工作目錄下,不會(huì)造成系統(tǒng)范圍的修改,這個(gè)模式讓你在某個(gè)Node程序下盡情地安裝,測(cè)試模塊,而不會(huì)影響你電腦上的其他Node程序。
全局模式適合那些將被很多程序使用,而且總是被全局加載的公共模塊,比如命令行工具這些公不會(huì)被應(yīng)用程序直接使用的模塊。
如果你不知道一個(gè)模塊該用哪個(gè)模式安裝,那就應(yīng)該使用本地模式。如果一個(gè)模塊的作者需要某個(gè)模塊被全局的安裝,通常他會(huì)在安裝說明里指出。
全局模式
如果你安裝Node時(shí)使用的默認(rèn)目錄,在全局模式下面,NPM會(huì)把包安裝到/usr/local/lib/node_modules。如果你執(zhí)行下面的命令,NPM會(huì)搜索并下載名為sax的最新版并安裝到/usr/local/lib/node_modules/sax目錄下。
代碼如下:$ npm install –g sax
注意:如果你當(dāng)前shell用戶沒有足夠的權(quán)限,你需要使用root用戶登錄或者使用sudo來執(zhí)行命令:
代碼如下:
$ sudo npm install –g sax
隨后在你的Node腳本里需要sax模塊的時(shí)候,使用下面的語句來加載:
代碼如下:
var sax = require(‘sax');
如果你沒有在應(yīng)用程序目錄下用本地模式安裝過sax,Node將會(huì)在前面的安裝目錄里查找名為sax的模塊,否則會(huì)優(yōu)先加載本地版本。
默認(rèn)模式是本地模式,因此你需要在NPM命令后加上-g標(biāo)記來啟用全局模式。
本地模式
本地模式是Node包依賴機(jī)制的默認(rèn)推薦模式,這個(gè)模式下,NPM安裝的所有東西都在當(dāng)前工作目錄(根目錄也不例外),而不會(huì)影響任何全局的設(shè)置。這種機(jī)制可以讓你一個(gè)個(gè)的設(shè)置應(yīng)用程序的依賴模塊以及它們的版本,而不用擔(dān)心會(huì)污染全局的模塊空間。這意味著你可以有依賴同一個(gè)模塊不同版本的兩個(gè)應(yīng)用,它們卻不會(huì)產(chǎn)生沖突。
在這個(gè)模式下,NPM使用當(dāng)前工作目錄下的node_modules目錄來存放模塊,比如你當(dāng)前工作目錄是/home/user/apps/my_app,NPM將會(huì)用/home/user/apps/my_app/node_modules來存放所有本地模塊。這意味著,如果你在代碼里使用模塊名來引用模塊,Node首先會(huì)到這個(gè)本地的node_modules目錄下查找,如果沒找到才會(huì)去搜索全局的node_modules目錄,本地模塊優(yōu)先級(jí)總是高于全局模塊。
安裝模塊
使用下面命令來安裝一個(gè)模塊的最新版本:
代碼如下:
$ npm install
例如,下載和安裝名一個(gè)名為sax的模塊的最新版本,你首先需要把你應(yīng)用程序的根目錄設(shè)置為當(dāng)前目錄,然后輸入:
代碼如下:
$ npm install sax
這個(gè)操作,會(huì)在當(dāng)前目錄下建立node_modules子目錄(如果不存在的話),然后在下面安裝sax模塊。
你也可以通過下面的命令,來選擇安裝某個(gè)特定的版本:
代碼如下:
$ npm install
使用指定的版本號(hào)替換命令里的占位符即可,比如,要下載sax模塊的0.2.5版本,你只用運(yùn)行:
代碼如下:
$ npm install sax@0.2.5
占位符也可以用一個(gè)版本范圍來替換,比如,要安裝sax模塊0.2分支的最新版,可以運(yùn)行:
代碼如下:
$ npm Viagra Canada Online install sax@0.2.x
或者,安裝版本號(hào)小于0.3的最新版:
代碼如下:
$ npm install sax@”<0.3”
甚至可以指定一個(gè)版本范圍:
代碼如下:
$ npm install sax@">=0.1.0 <0.3.1"
卸載模塊
使用下面命令可以卸載一個(gè)本地模塊:
代碼如下:
$ npm uninstall
如果要卸載的是一個(gè)全局模塊,加上-g標(biāo)記即可:
代碼如下:
$ npm uninstall -g
更新模塊
使用下面命令來更新本地模塊:
代碼如下:
$ npm update
這個(gè)命令會(huì)嘗試獲取最新版的模塊包并更新本地版本,如果本地沒有安裝,則會(huì)安裝它,如果需要更新的是全局環(huán)境,需要加上-g標(biāo)記:
代碼如下:
$ npm update –g
使用可執(zhí)行文件
模塊可以包含一個(gè)或多個(gè)可執(zhí)行文件,如果你使用默認(rèn)目錄設(shè)置來安裝一個(gè)全局模塊,NPM會(huì)把可執(zhí)行文件安裝到/usr/local/bin目錄下,這個(gè)目錄通常也被設(shè)置為系統(tǒng)PATH環(huán)境變量的一部分。如果你局部安裝這個(gè)模塊,NPM會(huì)把所有可執(zhí)行文件放到./node_modules/.bin目錄下。
處理依賴關(guān)系
NPM不僅安裝你需要的模塊包,而且會(huì)安裝這些模塊所依賴的其它模塊,比如,如果你需要安裝模塊A,而A又依賴模塊B和C,那么在你安裝A的時(shí)候B和C同時(shí)會(huì)被安裝到./node_modules/A/node_modules目錄下。
例如,你用下面的命令本地安裝了一個(gè)叫nano的模塊:
代碼如下:
$npm install nano
NPM的輸出會(huì)類似這樣:
這告訴你nano模塊依賴underscore和request兩個(gè)模塊,并且還指出了安裝的版本。如果你現(xiàn)在去查看./node_modules/nano/node_modules目錄,你會(huì)發(fā)現(xiàn)這兩個(gè)模塊已經(jīng)被安裝了:
代碼如下:
$ ls node_modules/nano/node_modules
request underscore
使用package.json文件定義依賴關(guān)系
當(dāng)開始編寫一個(gè)應(yīng)用程序時(shí),可以在應(yīng)用程序根目錄創(chuàng)建一個(gè)package.json文件來定義應(yīng)用程序的元數(shù)據(jù),比如應(yīng)用的名字,作者,代碼庫地址,聯(lián)系方式等等。程序依賴的外部模塊也在這個(gè)文件里指定。
如果不打算把程序發(fā)布到NPM上,就可以不用建這個(gè)文件,不過即使你的程序是私有的,這個(gè)文件其實(shí)也有用,它可以告訴NPM這個(gè)應(yīng)用程序的依賴關(guān)系。(譯者注:比如你把項(xiàng)目源碼從開發(fā)環(huán)境復(fù)制到生產(chǎn)環(huán)境,可以通過調(diào)用npm install來一次性安裝所有依賴包,npm會(huì)通過package.json內(nèi)指定的依賴關(guān)系來自動(dòng)完成依賴模塊的下載安裝,不用自己一個(gè)個(gè)去操作,稍候有詳細(xì)介紹)
package.json是一個(gè)JSON格式的文件,包含了一系列屬性,但是如果僅僅是為了說明程序的依賴關(guān)系,則只用一個(gè)dependencies屬性就行。比如,一個(gè)叫MyApp的應(yīng)用程序依賴sax,nano和request模塊,只需要建立這樣一個(gè)package.json:
代碼如下:
{
"name" : "MyApp",
"version" : "1.0.0",
"dependencies" : {
"sax" : "0.3.x",
"nano" : "*",
"request" : ">0.2.0"
}
}
你指定了MyApp應(yīng)用,依賴0.3版本的sax,任意版本的nano,以及版本高于0.2.0的request模塊。
注意:你可能發(fā)現(xiàn),如果你指定了name和version字段,NPM會(huì)不工作,這只會(huì)發(fā)生在舊版本的NPM,因?yàn)樽畛鮊PM是針對(duì)公共模塊使用的,而不是私有程序。
然后,在應(yīng)用程序的根目錄,執(zhí)行:
代碼如下:
$ npm install
這樣,NPM就會(huì)分析依賴關(guān)系以及你本地的node_modules目錄,并自動(dòng)的下載和安裝缺失的模塊。
你也可以通過下面的命令把所有本地模塊更新到符合你定義的依賴項(xiàng)設(shè)置的最新版本:
代碼如下:
$npm update
事實(shí)上,你僅用update方法就行了,因?yàn)樗鼤?huì)讓NPM自動(dòng)獲取那些缺失的依賴模塊。
小結(jié)
本章學(xué)習(xí)了如何安裝Node和Node包管理器(NPM),現(xiàn)在你可以使用NPM來安裝,卸載,刪除任何第三方模塊,還學(xué)習(xí)了如何配合package.json文件來使用NPM管理應(yīng)用程序依賴項(xiàng)。
現(xiàn)在你安裝了Node和NPM,可以去動(dòng)手試試?yán)?,不過,首先你需要知道一些關(guān)于Node和事件驅(qū)動(dòng)的相關(guān)知識(shí),下章將會(huì)介紹這些內(nèi)容。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com