node中的模塊

node中的模塊

編寫稍大一點的程序時一般都會將代碼模塊化。在NodeJS中,一般將代碼合理拆分到不同的JS文件中,每一個文件就是一個模塊,而文件路徑就是模塊名。

在編寫每個模塊時,都有require、exports、module三個預先定義好的變量可供使用。

一: require

require函數用于在當前模塊中加載和使用別的模塊,傳入一個模塊名,返回一個模塊導出對象。模塊名可使用相對路徑(以./開頭),

或者是絕對路徑(以/或C:之類的盤符開頭)。另外,模塊名中的.js擴展名可以省略。以下是一個例子。

復制代碼

var foo1 = require('./foo');

var foo2 = require('./foo.js');

var foo3 = require('/home/user/foo');

var foo4 = require('/home/user/foo.js');

// foo1至foo4中保存的是同一個模塊的導出對象。

復制代碼

另外,可以使用以下方式加載和使用一個JSON文件。

var data = require('./data.json');

二:exports

exports對象是當前模塊的導出對象,用于導出模塊公有方法和屬性。別的模塊通過require函數使用當前模塊時得到的就是當前模塊的exports對象。

以下例子中導出了一個公有方法。

exports.hello = function () {

console.log('Hello World!');

};

三:module

通過module對象可以訪問到當前模塊的一些相關信息,但最多的用途是替換當前模塊的導出對象。例如模塊導出對象默認是一個普通對象,

如果想改成一個函數的話,可以使用以下方式。

module.exports = function () {

console.log('Hello World!');

};

以上代碼中,模塊默認導出對象被替換為一個函數。

四:模塊初始化

一個模塊中的JS代碼僅在模塊第一次被使用時執行一次,并在執行過程中初始化模塊的導出對象。之后,緩存起來的導出對象被重復利用。

五:主模塊

通過命令行參數傳遞給NodeJS以啟動程序的模塊被稱為主模塊。主模塊負責調度組成整個程序的其它模塊完成工作。例如通過以下命令啟動程序時,main.js就是主模塊。

$ node main.js

六:完整示例

例如有以下目錄。

- /home/user/hello/

- util/

counter.js

main.js

其中counter.js內容如下:

復制代碼

var i = 0;

function count() {

return ++i;

}

exports.count = count;

復制代碼

該模塊內部定義了一個私有變量i,并在exports對象導出了一個公有方法count。

主模塊main.js內容如下:

復制代碼

var counter1 = require('./util/counter');

var? ? counter2 = require('./util/counter');

console.log(counter1.count());

console.log(counter2.count());

console.log(counter2.count());

復制代碼

運行該程序的結果如下:

$ node main.js

1

2

3

可以看到,counter.js并沒有因為被require了兩次而初始化兩次。

七:補充內容:二進制模塊(只做了解)

雖然一般我們使用JS編寫模塊,但NodeJS也支持使用C/C++編寫二進制模塊。編譯好的二進制模塊除了文件擴展名是.node外,

和JS模塊的使用方式相同。雖然二進制模塊能使用操作系統提供的所有功能,擁有無限的潛能,但對于前端同學而言編寫過于困難,

并且難以跨平臺使用,因此不在本教程的覆蓋范圍內。

小結

本章介紹了有關NodeJS的基本概念和使用方法,總結起來有以下知識點:

NodeJS是一個JS腳本解析器,任何操作系統下安裝NodeJS本質上做的事情都是把NodeJS執行程序復制到一個目錄,

然后保證這個目錄在系統PATH環境變量下,以便終端下可以使用node命令。

終端下直接輸入node命令可進入命令交互模式,很適合用來測試一些JS代碼片段,比如正則表達式。

NodeJS使用CMD模塊系統,主模塊作為程序入口點,所有模塊在執行過程中只初始化一次。

除非JS模塊不能滿足需求,否則不要輕易使用二進制模塊,否則你的用戶會叫苦連天。

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

推薦閱讀更多精彩內容

  • node中的模塊編寫稍大一點的程序時一般都會將代碼模塊化。在NodeJS中,一般將代碼合理拆分到不同的JS文件中,...
    糖心m閱讀 320評論 0 0
  • Node.js是目前非?;馃岬募夹g,但是它的誕生經歷卻很奇特。 眾所周知,在Netscape設計出JavaScri...
    w_zhuan閱讀 3,629評論 2 41
  • 【轉】 遵循的模塊化規范不一樣 模塊化規范:即為 JavaScript 提供一種模塊編寫、模塊依賴和模塊運行的方案...
    houruyaogeili閱讀 3,317評論 0 2
  • 模塊 Node 有簡單的模塊加載系統。在 Node 里,文件和模塊是一一對應的。下面例子里,foo.js加載同一個...
    保川閱讀 604評論 0 0
  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宮若石閱讀 1,107評論 0 1