Node.js(一)

Node.js誕生于2009年,Node.js采用C++語言編寫而成,是一個JavaScript的運行環境,Node.js 是一個基于Chrome V8引擎的JavaScript的運行環境,讓JavaScript的運行脫離瀏覽器端,可以使用JavaScript語言編寫服務端代碼.

安裝nodejs

鏈接: http://nodejs.cn/

如果確定node已經安裝,但未顯示的話,可能出現是問題,node在mac中需要配置環境變量:

  1. touch ~/.bash_profile
  2. vim ~/.bash_profile
  3. export PATH = $PATH:/usr/local/bin
  4. 退出vim命令: :x
  5. 重啟電腦或者scource ~/.bash_profile
學習資料:

(1) 菜鳥教程: http://www.runoob.com/nodejs/nodejs-tutorial.html
(2)nodejs參考手冊: http://nodejs.cn/api/

nodejs模塊化開發
為什么會有模塊:

在JavaScript發展初期就是為了實現簡單是頁面交互邏輯,寥寥數語即可;如今CPU、瀏覽器性能得到了極大的提升,很多頁面邏輯遷移到客戶端(表單驗證等),隨著web2.0時代的到來,Ajax技術得到廣泛的應用,jQuery等前端庫層出不窮,前端代碼日益膨脹,這時候JavaScript作為嵌入式的腳本語言的定位動搖了,JavaScript卻沒有為組織代碼提供任何明顯幫助,甚至沒有類的概念,更不用說模塊(module)了,JavaScript極其簡單的代碼組織規范不足以駕馭如此強大規模的代碼。

模塊的好處:

既然JavaScript不能處理如此大規模的代碼,我們可以借鑒一下其他語言是怎么處理大規模程序設計的,在Java中又一個重要的概念——package,邏輯上相關的代碼組織到同一個包內,包內是一個相對獨立的王國,不用擔心命名沖突什么的,那么如果外部使用呢?直接import對應package即可:import java.until.Arraylist.
遺憾的是JavaScript在設計時定位原因,沒有提供類似的功能,開發者需要模擬出類似的功能,來隔離、阻止復雜的JavaScript代碼,我們成為模塊化。
一個模塊就是實現特定功能的文件。有了模塊,我們就可以更方便的使用別人的代碼,想要什么功能,就加載什么模塊。模塊開發需要遵循一定的規范,各行其是就都亂套了。

commonjs規范

CommonJS就是為JS的表現來制定規范,因為js沒有模塊的功能所以CommonJs應運而生,它希望js可以在任何地方運行不只是瀏覽器中。
CommonJs能有一定的影響力,我覺得絕對離不開Node的人氣,不過,Node、CommonJs、瀏覽器甚至W3C之間有什么關系呢


image.png
require()

Node.js的模塊倉庫https://www.npmjs.com/,已經存放了15萬個模塊,其中絕大部分都是CommonJS格式.這種格式的核心就是require語句,模塊通過它加載.

require()的基本用法

當Node遇到 require(X) 時,按下面的順序處理
(1) 如果 X 是內置模塊 (比如 require("http") )
????? a. 返回該模塊
????? b. 不在繼續執行
(2) 如果 X 以"./" 或者 "/" 或者 "../"開頭
????? a. 根據 X 所在的符模塊,確定 X 的絕對路徑
????? b. 將 X 當成文件,依次查找下面文件,只要其中有一個存在,就返回該文件,不再繼續執行.

X
X.js
X.json
X.node

????? c. 將 X 當成目錄,依次查找下面文件,只要其中有一個存在,就返回該文件,不再繼續執行

X/package.json (main字段)
X/index.js
X/index.json
X/index.node

(3) 如果 X 不帶路徑
????? a. 根據 X 所在的父模塊,確定 X 可能的安裝目錄
????? b. 依次在每個目錄中,將 X 當成文件名或目錄名加載
(4) 拋出 “not found”

舉例:
當前腳本文件 /home/ry/projects/foo.js, 執行了require("bar"). 這屬于上面的第三種情況.Node內部的運行過程如下:
首先確定 x 的絕對路徑可能是下面這些位置,依次搜索每一個目錄.

/home/ry/projects/node_modules/bar
/home/ry/node_modules/bar
/home/node_modules/bar
/node_modules/bar

搜索時,Node先將 bar 當成文件名,依次嘗試加載下面這些文件,只要有一個成功就返回

bar
bar.js
bar.json
bar.node

如果都不成功,說明bar 可能是目錄名,于是依次嘗試加載下面這些文件

bar/package.json (main字段)
bar/index.js
bar/index.json
bar/index.node

如果在所有目錄中,都無法找到bar對應的文件或目錄,就拋出一個錯誤.

案例:引入url模塊解析路徑

var http = require("http"); //引入一個http的模塊
var url = require("url"); //引入路徑模塊
var server = http.createServer(function(req,res){
    //parse(路徑,第二個參數為將請求參數解析為對象)
    var urlObj = url.parse(req.url,true);
    console.log(urlObj);
    res.end();
});
server.listen(8080);
創建自己的模塊
加載當前目錄的模塊

不加var的變量是全局變量,在模塊內部最好加var
要導出一個屬性或者方法使用:modules.exports
如果是模塊下的方法和屬性使用:modules.exports={xx:xx},如果是想讓莫虧啊直接接受方法就導出函數

加載非當前目錄的模塊

首先會看當前目錄是否有一個node_modules,如果有就進入里面查找是否有叫模塊名稱的文件或者是否有叫模塊名稱的文件夾,如果是模塊名稱的文件夾需要看一下文件夾內部是否有叫index.js或者package.json中是否有設置main屬性,可以通過指令npm init 來進行創建

{
    "name":"home",
    "version" :"0.0.1",
    "main": "home2.js"
}

如果當前目錄沒有node_modules,會向上查找.

加載原生模塊
image.png

非node項目也可以使用模塊化開發技術,用的比較多的模塊加載器有require(CMD),seaJs(AMD)

nodejs的內置模塊

Buffer , C/C++Addons , Child Processes , Cluster , Console , Crypto , Debugger , DNS , Domian , Errors , Events , File System , Globals , HTTP , HTTPS , Modules , Net , OS , Path , Process , Punycode , Query Strings , Readline , REPL , Stream , String Decoder , Timers , TLS/SSL , TTY , UDP/Datagram , URL , Utilities , V8 , VM , ZLIB ;
內置模塊不需要安裝,外置模塊需要安裝

參考資料: http://www.cnblogs.com/dolphinX/p/4381855.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容

  • Node.js是目前非常火熱的技術,但是它的誕生經歷卻很奇特。 眾所周知,在Netscape設計出JavaScri...
    w_zhuan閱讀 3,635評論 2 41
  • Node.js是目前非常火熱的技術,但是它的誕生經歷卻很奇特。 眾所周知,在Netscape設計出JavaScri...
    Myselfyan閱讀 4,086評論 2 58
  • 有限的選擇是建立在分享權力的基礎上的。 分享權力,這在中國的傳統家庭教育中時從來不曾有的觀點,甚至于對這個觀點會產...
    熙寶愛吃飯閱讀 616評論 0 2
  • 從2016年6月12日坐高鐵(那是我第一次坐高鐵,速度感不言而喻)來到首都北京,到現在已有8個多月,記得來時...
    田田圈Tina閱讀 527評論 5 3
  • 最近,很多學生會找我要測試卷,說自己復習到現在了沒做過題,或者只做過選擇題,不知道如何下筆;看到答案的時候甚至發現...
    勤思教育網絡部閱讀 199評論 0 0