#0 系列目錄#javascript
#1 Node.js安裝與配置# ##1.1 Windows平臺下的Node.js安裝## 在過去,Node.js一直不支持在Windows平臺下原生編譯,須要藉助Cygwin或 MinGW來模擬POSIX系統,才能編譯安裝。幸運的是2011年6月微軟開始與Joyent合做移植Node.js到Windows平臺上 (http://www.infoq.com/cn/news/2011/06/node-exe),此次合做的成果最終呈如今0.6.x的穩定版的發佈上。此次的版本發佈使得Node.js在Windows平臺上的性能大幅度提升,使用方面也更容易和輕巧,徹底擺脫掉Cygwin或MinGW等實驗室式的環境,而且在某些細節方面,表現出比Linux下更高的性能,細節參見http://www.infoq.com/news/2011/11/Nodejs-Windows。php
在Windows(Windows7)平臺下,我將介紹二種安裝Node.js的方法,即普通和文藝安裝方法
。java
普通安裝方法其實就是最簡單的方法了,對於大多Windows用戶而言,都是不太喜歡折騰的人,你能夠從這裏(http://nodejs.org/dist/v0.6.1/node-v0.6.1.msi)直接下載到Node.js編譯好的msi文件。而後雙擊便可在程序的引導下完成安裝。node
在命令行中直接運行:python
node -v
命令行將打印出:c++
v0.6.1
該引導步驟會將node.exe文件安裝到C:\Program Files (x86)\nodejs\目錄下,並將該目錄添加進PATH環境變量
。git
Windows平臺下的文藝安裝方法主要提供給那些熱愛折騰,喜歡編譯的同窗們。在編譯源碼以前須要注意的是你的Windows系統是否包含編譯源碼的工具
。Node.js的源碼主要由C++代碼和JavaScript代碼構成,可是卻用gyp工具 (http://code.google.com/p/gyp/)來作源碼的項目管理,該工具採用Python語言寫成的。在Windows平臺上,Node.js採用gyp來生成Visual Studio Solution文件,最終經過VC++的編譯器將其編譯爲二進制文件。因此,你須要知足如下兩個條件:程序員
下載Node.js的0.6.1版本的源碼壓縮包(http://nodejs.org/dist/v0.6.1/node-v0.6.1.tar.gz)並解壓之。github
經過命令行進入解壓的源碼目錄,執行vcbuild.bat release命令
,而後經歷了漫長的等待後,編譯完成後,在Release目錄下能夠找到編譯好的node.exe文件。經過命令行執行node -v。shell
命令行返回結果爲:
v0.6.1
##1.2 Unix/Linux平臺下的Node.js安裝## 因爲Node.js尚處於v0.x.x的版本的快速發展中,Unix/Linux平臺的發行版都不會預置Node的二進制文件,經過源碼進行編譯安裝是目前最好的選擇
。並且用Unix/Linux系統的同窗們多數都是文藝程序員,本節只介紹如何經過源碼進行編譯和安裝。
如同在Windows平臺下同樣,Node.js依然是採用gyp工具管理生成項目的,不一樣的是經過make工具進行最終的編譯
。因此Unix/Linux平臺下你須要如下幾個必備條件,才能確保編譯完成:
Python。用於gyp,能夠經過在shell下執行python命令,查看是否已安裝python,並確認版本是否符合需求(2.6或更高版本,但不推薦 3.0)。
源代碼編譯器,一般 Unix/Linux平臺都自帶了C++的編譯器 (GCC/G++)。若是沒有,請經過當前發行版的軟件包安裝工具安裝make,g++這些編譯工具。
a. Debian/Ubuntu下的工具是apt-get b. RedHat/centOS下經過yum命令 c. Mac OS X下你可能須要安裝xcode來得到編譯器
若是你計劃在Node.js中啓用網絡加密,OpenSSL的加密庫也是必須的
。該加密庫是libssl-dev,能夠經過apt-get install libssl-dev等命令安裝。完成以上預備條件後,咱們獲取源碼並進行環境檢查吧:
wget http://nodejs.org/dist/v0.6.1/node-v0.6.1.ta tar zxvf node-v0.6.1.tar.gz cd node-v0.6.1 ./configure // 檢查環境是否符合Nodejs的編譯須要
若是檢查沒有經過,請確認上面提到的三個條件是否知足。若是configure命令 執行成功,就能夠進行編譯了:
make make install
Nodejs經過make工具進行編譯和安裝(若是make install不成功,請使用sudo 以確保擁有權限)。完成以上兩步後,檢查一下是否安裝成功:
node -v
檢查是否返回:
v0.6.1
至此,Nodejs已經編譯並安裝完成。如需卸載,能夠執行make uninstall進行卸載
。
##1.3 小結## 以上介紹了Linux和Windows平臺下Nodejs的安裝,以後能夠如同Nodejs官方網站上介紹的那樣,編寫example.js文件。
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/pla in'}); res.end('Hello World\n'); }).listen(1337, "127.0.0.1"); console.log('Server running at http://127.0.0.1:1 337/');
在命令行中執行它:
node example.js
你就能夠經過瀏覽器訪問http://127.0.0.1:1337獲得Hello World的響應。**注意:在JavaScript中,一個函數能夠做爲另外一個函數接收一個參數。咱們能夠先定義一個函數,而後傳遞,也能夠在傳遞參數的地方直接定義函數。
**以下的方式更優雅:
var http = require("http"); function onRequest(request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); } http.createServer(onRequest).listen(8888);
#2 安裝NPM# NPM的全稱是Node Package Manager
,若是你熟悉ruby的gem,Python的 PyPL、setuptools,PHP的pear,那麼你就知道NPM的做用是什麼了。沒錯, 它就是Nodejs的包管理器
。Nodejs自身提供了基本的模塊。可是在這些基本模塊上開發實際應用須要較多的工做。所幸的是筆者執筆此文的時候NPM上已經有了5112個Nodejs庫或框架,這些庫從各個方面能夠幫助Nodejs的開發者完成較爲複雜的應用。這些庫的數量和活躍也從側面反映出Nodejs社區的發展是十分神速和活躍的。下面我將介紹安裝NPM和經過NPM安裝Nodejs的第三方庫, 以及在大陸的網絡環境下,如何更好的利用NPM。
##2.1 Unix/Linux下安裝NPM## 就像NPM的官網(http://npmjs.org/)上介紹的那樣,安裝NPM僅僅是一行命令的事情:
curl http://npmjs.org/install.sh | sudo sh
這裏詳解一下這句命令的意思,curl http://npmjs.org/install.sh是經過curl命令獲 取這個安裝shell腳本,按後經過管道符|將獲取的腳本交由sh命令來執行。
咱們以underscore爲例,來展現下經過npm安裝第三方包的過程。
npm install underscore
返回:
underscore@1.2.2 ./node_modules/underscore
因爲一些特殊的網絡環境,直接經過npm install命令安裝第三方庫的時候,常常會出現卡死的狀態。幸運的是國內CNode社區的@fire9同窗利用空餘時間搭建了一個鏡像的NPM資源庫,服務器架設在日本,能夠繞過某些沒必要要的網絡問題。你能夠經過如下這條命令來安裝第三方庫:
npm --registry "http://npm.hacknodejs.com/" insta ll underscore
若是你想將它設爲默認的資源庫,運行下面這條命令便可:
npm config set registry "http://npm.hacknodejs.com/"
設置以後每次安裝時就能夠不用帶上—registry參數。值得一提的是還有另外一個鏡像可用,該鏡像地址是http://registry.npmjs.vitecho.com,如需使用,替換上面兩行命令的地址便可。
##2.2 Windows下安裝NPM##
因爲Nodejs最初在Linux開發下的歷史緣由,致使NPM一開始也不支持 Windows環境,可是隨着Nodejs成功移植到到Windows平臺,NPM在 Windows下的需求亦是日漸增長。下面開始Windows下的NPM之旅吧。
因爲github網站不支持直接下載打包了全部submodule的源碼包,因此須要經過 git工具來簽出全部的源碼。 從http://code.google.com/p/msysgit/downloads/list,能夠下載到msysgit這個Windows平臺下的git客戶端工具(最新版本文件爲Git-1.7.7.1- preview20111027.exe)。在下載以後雙擊安裝。
打開命令行工具(CMD),執行如下命令,能夠經過msysgit簽出NPM的全部源碼和依賴代碼並安裝npm。
git clone --recursive git://github.com/isaacs/npm .git cd npm node cli.js install npm -gf
在執行這段代碼以前,請確保node.exe是跟經過node.msi的方式安裝的,或者在PATH環境變量中
。這段命令也會將npm加入到PATH環境變量中去,以後能夠隨處執行npm命令。若是安裝中遇到權限方面的錯誤,請確保cmd命令行工具是經過管理員身份運行的
。安裝成功後,執行如下命令:
npm install underscore
返回:
underscore@1.2.2 ./node_modules/underscore
如此,Windows平臺下的NPM安裝完畢。若是遭遇網絡問題沒法安裝,請參照 Linux下的NPM命令,添加鏡像地址
。
#3 快速建立基於npm的nodejs庫# 用Node實現的功能愈來愈多,代碼愈來愈複雜,咱們就開始考慮如何把代碼從項目中抽出來,造成單獨的類庫(模塊)管理
。就像咱們所依賴其餘第三方類庫同樣。
##3.1 npm是什麼?## NPM的全稱是,是一個NodeJS包管理和分發工具,已經成爲了非官方的發佈Node模塊的標準。
Nodejs自身提供了基本的模塊,可是開發實際應用過程當中僅僅依靠這些基本模塊則還須要較多的工做。幸運的是,Nodejs庫和框架爲咱們提供了幫助,讓咱們減小工做量。可是成百上千的庫或者框架管理起來又很麻煩,有了NPM,能夠很快的找到特定服務要使用的包,進行下載、安裝以及管理已經安裝的包
。
相似於Java中的Maven,Ubuntu中的apt-get, Ruby中的Gem, Python中pypi等…
NPM模塊發佈頁:https://npmjs.org/
##3.2 快速建立包## 項目描述:讀取文件,把全部的大寫文字轉換成小寫文字,控制檯輸出。
建立項目:
~ D:\workspace\javascript>mkdir nodejs-package && cd nodejs-package
建立項目結構:
~ D:\workspace\javascript\nodejs-package>mkdir bin ~ D:\workspace\javascript\nodejs-package>touch bin/lowercase ~ D:\workspace\javascript\nodejs-package>touch bin/lowercase.bat ~ D:\workspace\javascript\nodejs-package>mkdir test ~ D:\workspace\javascript\nodejs-package>mkdir test/data ~ D:\workspace\javascript\nodejs-package>touch test/data/sample.txt ~ D:\workspace\javascript\nodejs-package>touch lowercase.js ~ D:\workspace\javascript\nodejs-package>touch example.js ~ D:\workspace\javascript\nodejs-package>touch README.md
項目結構說明:
bin目錄: 用於存放命令的目錄
bin/lowercase文件: Linux命令行可執行文件
bin/lowercase.bat文件: Win命令行可執行文件
test目錄: 用於存放測試代碼的目錄
test/data目錄: 用於存放測試數據的目錄
test/data/sample.txt: 測試數據文件
lowercase.js文件: 核心功能代碼文件
example.js文件: 例子代碼文件
package.json文件: 項目描述及依賴文件
README.md文件: 項目說明文件
建立文件:package.json
~ D:\workspace\javascript\nodejs-package>npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sane defaults. See `npm help json` for definitive documentation on these fields and exactly what they do. Use `npm install --save` afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. name: (nodejs-package) lowercase version: (0.0.0) 0.0.1 description: A demo package entry point: (index.js) test command: git repository: keywords: author: Conan Zhang license: (BSD) MIT About to write to D:\workspace\javascript\nodejs-package\package.json: { "name": "lowercase", "version": "0.0.1", "description": "A demo package", "main": "index.js", "directories": { "test": "test" }, "dependencies": { "moment": "~2.4.0" }, "devDependencies": {}, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": "", "author": "Conan Zhang", "license": "MIT", "readmeFilename": "README.md" } Is this ok? (yes) yes npm WARN package.json lowercase@0.0.1 No readme data!
修改文件:package.json
~ vi package.json { "name": "lowercase_demo", "version": "0.0.1", "description": "A demo package of lowercase", "keywords":[ "demo","lowercase" ], "author": "Conan Zhang (http://blog.fens.me)", "license": "MIT", "main": "lowercase.js", "repository": { "type":"git", "url":"https://github.com/bsspirit/lowercase_demo" }, "engines": { "node": ">=v0.10.5" }, "readmeFilename": "README.md" }
編輯文件:lowercase.js
~ vi lowercase.js "use strict" var fs = require('fs'); exports.lowerCase = function (myfile) { console.log(myfile); if (fs.existsSync(myfile)) { var content = fs.readFileSync(myfile, 'utf8'); console.log(content.toLowerCase()); } else { console.log("File does not exist - " + myfile); } }
編輯文件:example.js
~ vi example "use strict" var lowercase = require('./lowercase.js'); var myfile="test/data/sample.txt" lowercase.lowerCase(myfile);
編輯文件:test/data/sample.txt
~ vi sample.txt JAVA NODEJS PYTHON PHP .NET R RUBY C C++ GO
運行:example.js
~ D:\workspace\javascript\nodejs-package>node example.js test/data/sample.txt java nodejs python php .net r ruby c c++ go
編輯文件:README.md
~ vi README.md lowercase ======================== A demo package of lowercase ...
##3.3 建立命令行工具## 編輯文件:bin/lowercase
~ vi lowercase #!/usr/bin/env node var myfile = process.argv.slice(2); var path = require('path'); var fs = require('fs'); var dir = path.dirname(fs.realpathSync(__filename))+"/../"; require(dir+'lowercase.js').lowerCase(dir+myfile);
編輯文件:bin/lowercase.bat
~ vi lowercase.bat node.exe bin/lowercase %1
運行lowercase.bat
~ D:\workspace\javascript\nodejs-package>bin\lowercase.bat test\data\sample.txt D:\workspace\javascript\nodejs-package>node.exe bin/lowercase test\data\sample.txt D:\workspace\javascript\nodejs-package\bin/../test\data\sample.txt java nodejs python php .net r ruby c c++ go
##3.4 本地安裝lowercase包## 新建項目,並安裝lowercase依賴庫
~ D:\workspace\javascript>mkdir nodejs-package-project && cd nodejs-package-project ~ D:\workspace\javascript\nodejs-package-project>npm install ..\nodejs-package lowercase_demo@0.0.1 node_modules\lowercase_demo
新建運行文件:app.js
~ vi app.js var lowercase = require('lowercase_demo'); var myfile="data.txt" lowercase.lowerCase(myfile);
數據文件: data.txt
~ vi data.txt APP BACCDADDS
運行app.js
~ D:\workspace\javascript\nodejs-package-project>node app.js data.txt app baccdadds
##3.5 項目上傳到github## 把lowercase_demo庫,上傳到github。
~ git init ~ git add . ~ git commit -m 'init' ~ git remote add origin git@github.com:bsspirit/lowercase_demo.git ~ git push origin master
##3.6 經過npm發佈包## 在npm上,註冊新用戶。
~ D:\workspace\javascript\nodejs-package>npm adduser Username: bsspirit Password: Email: bsspirit@gmail.com npm http PUT https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit npm http 409 https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit npm http GET https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit npm http 200 https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit npm http PUT https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit/-rev/2-25eae797548e61 npm http 201 https://registry.npmjs.org/-/user/org.couchdb.user:bsspirit/-rev/2-25eae797548e61
在npm上,發佈項目:
~ D:\workspace\javascript\nodejs-package>npm publish npm http PUT https://registry.npmjs.org/lowercase_demo npm http 201 https://registry.npmjs.org/lowercase_demo npm http GET https://registry.npmjs.org/lowercase_demo npm http 200 https://registry.npmjs.org/lowercase_demo npm http PUT https://registry.npmjs.org/lowercase_demo/-/lowercase_demo-0.0.1.tgz/-rev/1-162a1 e npm http 201 https://registry.npmjs.org/lowercase_demo/-/lowercase_demo-0.0.1.tgz/-rev/1-162a1 e npm http PUT https://registry.npmjs.org/lowercase_demo/0.0.1/-tag/latest npm http 201 https://registry.npmjs.org/lowercase_demo/0.0.1/-tag/latest + lowercase_demo@0.0.1
##3.7 經過npm安裝## 經過npm下載安裝:
~ D:\workspace\javascript>mkdir nodejs-package-project2 && cd nodejs-package-project2 ~ D:\workspace\javascript\nodejs-package-project2>npm install lowercase_demo npm http GET https://registry.npmjs.org/lowercase_demo npm http 200 https://registry.npmjs.org/lowercase_demo lowercase_demo@0.0.1 node_modules\lowercase_demo
全局安裝lowercase_demo:
~ D:\workspace\javascript\nodejs-package-project2>npm install lowercase_demo -g npm http GET https://registry.npmjs.org/lowercase_demo npm http 304 https://registry.npmjs.org/lowercase_demo D:\toolkit\nodejs\lowercase -> D:\toolkit\nodejs\node_modules\lowercase_demo\bin\lowercase npm ERR! peerinvalid The package generator-karma does not satisfy its siblings' peerDependenci npm ERR! peerinvalid Peer generator-angular@0.4.0 wants generator-karma@~0.5.0 npm ERR! System Windows_NT 6.1.7601 npm ERR! command "D:\\toolkit\\nodejs\\\\node.exe" "D:\\toolkit\\nodejs\\node_modules\\npm\\bi lowercase_demo" "-g" npm ERR! cwd D:\workspace\javascript\nodejs-package-project2 npm ERR! node -v v0.10.5 npm ERR! npm -v 1.2.19 npm ERR! code EPEERINVALID npm ERR! npm ERR! Additional logging details can be found in: npm ERR! D:\workspace\javascript\nodejs-package-project2\npm-debug.log npm ERR! not ok code 0
錯誤不是lowercase_demo的,沒有關係。
執行全局命令:lowercase
~ D:\workspace\javascript\nodejs-package-project2>lowercase test\data\sample.txt D:\toolkit\nodejs\node_modules\lowercase_demo\bin/../test\data\sample.txt java nodejs python php .net r ruby c c++ go
注:關於命令lowercase,由於代碼中定義的是相對目錄
,因此只能訪問D:\toolkit\nodejs\node_modules\lowercase_demo\目錄的數據文件。