nodejs模塊加載

使用nodejs也有很長一段的時(shí)間了琳骡,但卻感覺自己并沒有太多的積累澳盐。有時(shí)候會問自己祈纯,“你學(xué)了這么久了,比起初學(xué)者你強(qiáng)在哪呢叼耙?”
或許只是幾個常用的API調(diào)用的更熟練一些吧腕窥。學(xué)習(xí)的路上還是要腳踏實(shí)地,穩(wěn)步前進(jìn)筛婉。

nodejs中簇爆,加載一個模塊通過require()方法,例如require('fs')爽撒。這個方法接受模塊的標(biāo)識符入蛆,可以加載的模塊分為3種:

  • node提供的核心模塊。
  • 路徑形式的文件模塊
  • 自定義模塊

核心模塊在node源代碼的編譯過程中已經(jīng)編譯為二進(jìn)制代碼硕勿,加載速度最快哨毁。加載文件模塊時(shí),標(biāo)識符是一個可以省略文件后綴名的文件路徑源武。node根據(jù)標(biāo)識符中的路徑查找文件扼褪,如果文件后綴名省略想幻,node會依次嘗試.js, .json, .node,每一種后綴名都對應(yīng)一種不同的加載方式话浇。通過require.extensions可以看到已有的文件加載方式脏毯,也可以自定義指定格式的加載方式。比如下面的代碼定義了.txt文件的加載方式凳枝。

require.extensions['.txt'] = function (module, filename) {
  var fs = require('fs')
  var res = fs.readFileSync(filename)
  module.exports = res.toString()
}

加載自定義模塊的標(biāo)識符與核心模塊的類似抄沮,不過核心模塊具有更高的優(yōu)先級。所以自定義模塊不能與核心模塊重名岖瑰。在加載自定義模塊時(shí)叛买,會依次查找當(dāng)前目錄下的node_modules,父目錄下的node_modules蹋订,……率挣,根目錄下的node_modules。通過module.paths查看所有需要查找的路徑露戒。

require()不僅可以加載文件椒功,還可以加載一個包,即通過標(biāo)識符查找到的是一個目錄智什。它會加載該目錄下package.jsonmain指定的文件动漾。如果加載失敗,則繼續(xù)查找目錄下的index荠锭,即index.js, index.json, index.node

被加載后的文件會被緩存旱眯,再次加載時(shí)文件不會再次執(zhí)行,而是從緩存中讀取证九。已經(jīng)緩存的文件可以通過require.cache查看删豺。也可以在此處刪除緩存。

在加載模塊時(shí)愧怜,node會向模塊提供幾個變量呀页,exports, module, require, __dirname, __filename。其中exports, module, require為模塊提供加載模塊拥坛,導(dǎo)出內(nèi)容的功能蓬蝶,__dirname為當(dāng)前文件所在目錄的絕對路徑,__filename為當(dāng)前文件的絕對路徑

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末渴逻,一起剝皮案震驚了整個濱河市疾党,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惨奕,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竭钝,死亡現(xiàn)場離奇詭異梨撞,居然都是意外死亡雹洗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門卧波,熙熙樓的掌柜王于貴愁眉苦臉地迎上來时肿,“玉大人,你說我怎么就攤上這事港粱◇Τ桑” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵查坪,是天一觀的道長寸宏。 經(jīng)常有香客問我,道長偿曙,這世上最難降的妖魔是什么氮凝? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮望忆,結(jié)果婚禮上罩阵,老公的妹妹穿的比我還像新娘。我一直安慰自己启摄,他們只是感情好稿壁,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著歉备,像睡著了一般傅是。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上威创,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天落午,我揣著相機(jī)與錄音,去河邊找鬼肚豺。 笑死溃斋,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吸申。 我是一名探鬼主播梗劫,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼截碴!你這毒婦竟也來了梳侨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤日丹,失蹤者是張志新(化名)和其女友劉穎走哺,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哲虾,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丙躏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年择示,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晒旅。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡栅盲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出废恋,到底是詐尸還是另有隱情谈秫,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布鱼鼓,位于F島的核電站拟烫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蚓哩。R本人自食惡果不足惜构灸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望岸梨。 院中可真熱鬧喜颁,春花似錦惰拱、人聲如沸掌栅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赃份。三九已至寂拆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抓韩,已是汗流浹背纠永。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谒拴,地道東北人尝江。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像英上,于是被迫代替她去往敵國和親炭序。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

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

  • nodejs通過require加載模塊苍日,require里面分為相對路徑和非相對路徑惭聂,不同的表示方法,node的尋找...
    前端大魔王閱讀 885評論 1 2
  • nodejs 模塊機(jī)制 簡單模塊定義和使用 在Node.js中相恃,定義一個模塊十分方便辜纲。我們以計(jì)算圓形的面積和周長兩...
    艾倫先生閱讀 1,041評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器侨歉,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • 今天的文章來自上午辦公室的閑聊屋摇,源于一位特別有思想的同事揩魂! 要我說坝牡恕!人生如戲火脉,不是演戲的戲牵舵,是游戲的戲!他一邊站...
    D071_武漢_夏至幸閱讀 188評論 0 1
  • 這個盛夏,說是重回母校方援,卻也不是真正回到母校没炒。關(guān)于我大學(xué)的回憶,基本都是停留在西環(huán)南路89號犯戏,而不是現(xiàn)在的濱海大...
    奈媞閱讀 265評論 1 1