最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

跟我學(xué)Node.js(四)---Node.js的模塊載入方式與機(jī)制

 更新時(shí)間:2014年06月04日 10:17:37   作者:  
Node.js中模塊可以通過文件路徑或名字獲取模塊的引用。模塊的引用會(huì)映射到一個(gè)js文件路徑,除非它是一個(gè)Node內(nèi)置模塊。Node的內(nèi)置模塊公開了一些常用的API給開發(fā)者,并且它們在Node進(jìn)程開始的時(shí)候就預(yù)加載了。

其它的如通過NPM安裝的第三方模塊(third-party modules)或本地模塊(local modules),每個(gè)模塊都會(huì)暴露一個(gè)公開的API。以便開發(fā)者可以導(dǎo)入。如

復(fù)制代碼 代碼如下:

var mod = require('module_name')

此句執(zhí)行后,Node內(nèi)部會(huì)載入內(nèi)置模塊或通過NPM安裝的模塊。require函數(shù)會(huì)返回一個(gè)對象,該對象公開的API可能是函數(shù),對象,或者屬性如函數(shù),數(shù)組,甚至任意類型的JS對象。

這里列下node模塊的載入及緩存機(jī)制

1)載入內(nèi)置模塊(A Core Module)
2)載入文件模塊(A File Module)
3)載入文件目錄模塊(A Folder Module)
4)載入node_modules里的模塊
5)自動(dòng)緩存已載入模塊

一、載入內(nèi)置模塊

Node的內(nèi)置模塊被編譯為二進(jìn)制形式,引用時(shí)直接使用名字而非文件路徑。當(dāng)?shù)谌降哪K和內(nèi)置模塊同名時(shí),內(nèi)置模塊將覆蓋第三方同名模塊。因此命名時(shí)需要注意不要和內(nèi)置模塊同名。如獲取一個(gè)http模塊

復(fù)制代碼 代碼如下:

var http = require('http')

返回的http即是實(shí)現(xiàn)了HTTP功能Node的內(nèi)置模塊。

二、載入文件模塊

絕對路徑的

復(fù)制代碼 代碼如下:
 
var myMod = require('/home/base/my_mod')


或相對路徑的

復(fù)制代碼 代碼如下:
 
var myMod = require('./my_mod')


注意,這里忽略了擴(kuò)展名“.js”,以下是對等的

復(fù)制代碼 代碼如下:
 
var myMod = require('./my_mod')
var myMod = require('./my_mod.js')

  
三、載入文件目錄模塊

可以直接require一個(gè)目錄,假設(shè)有一個(gè)目錄名為folder,如

復(fù)制代碼 代碼如下:
 
var myMod = require('./folder')

此時(shí),Node將搜索整個(gè)folder目錄,Node會(huì)假設(shè)folder為一個(gè)包并試圖找到包定義文件package.json。如果folder目錄里沒有包含package.json文件,Node會(huì)假設(shè)默認(rèn)主文件為index.js,即會(huì)加載index.js。如果index.js也不存在,那么加載將失敗。

假如目錄結(jié)構(gòu)如下

package.json定義如下

復(fù)制代碼 代碼如下:

{
    "name": "pack",
    "main": "modA.js"
}

此時(shí) require('./folder') 將返回模塊modA.js。如果package.json不存在,那么將返回模塊index.js。如果index.js也不存在,那么將發(fā)生載入異常。

四、載入node_modules里的模塊

如果模塊名不是路徑,也不是內(nèi)置模塊,Node將試圖去當(dāng)前目錄的node_modules文件夾里搜索。如果當(dāng)前目錄的node_modules里沒有找到,Node會(huì)從父目錄的node_modules里搜索,這樣遞歸下去直到根目錄。

不必?fù)?dān)心,npm命令可讓我們很方便的去安裝,卸載,更新node_modules目錄。

五、自動(dòng)緩存已載入模塊

對于已加載的模塊Node會(huì)緩存下來,而不必每次都重新搜索。下面是一個(gè)示例

modA.js

復(fù)制代碼 代碼如下:

console.log('模塊modA開始加載...')
exports = function() {
    console.log('Hi')
}
console.log('模塊modA加載完畢')

init.js

復(fù)制代碼 代碼如下:
 
var mod1 = require('./modA')
var mod2 = require('./modA')
console.log(mod1 === mod2)

命令行執(zhí)行:

node init.js

輸入如下

可以看到雖然require了兩次,但modA.js仍然只執(zhí)行了一次。mod1和mod2是相同的,即兩個(gè)引用都指向了同一個(gè)模塊對象。

相關(guān)文章

  • 前端大屏適配的三種解決方案總結(jié)

    前端大屏適配的三種解決方案總結(jié)

    在日常前端開發(fā)中,大屏項(xiàng)目是每個(gè)前端開發(fā)者必備技能,但是目前設(shè)備尺寸大小和分辨率都不相同,所以大屏適配成了一個(gè)頭疼的問題,所以下面這篇文章主要給大家介紹了關(guān)于前端大屏適配的三種解決方案,需要的朋友可以參考下
    2024-03-03
  • js中的push和join方法使用介紹

    js中的push和join方法使用介紹

    push和join方法想必大家并不陌生吧,在本文將為大家詳細(xì)介紹下js中的push和join方法的使用,感興趣的朋友可以參考下
    2013-10-10
  • uniapp 如何設(shè)置 tabbar 的 midButton 按鈕

    uniapp 如何設(shè)置 tabbar 的 midButton 按鈕

    在UniApp開發(fā)中,設(shè)置TabBar的midButton按鈕可以增加用戶交互的便利性,本文介紹了在App.vue中監(jiān)聽事件的方法,并提供了官方文檔鏈接作為參考,通過這種方式可以實(shí)現(xiàn)TabBar中的特殊按鈕功能,提升應(yīng)用的用戶體驗(yàn)
    2024-10-10
  • javascript小數(shù)精度丟失的完美解決方法

    javascript小數(shù)精度丟失的完美解決方法

    下面小編就為大家?guī)硪黄猨avascript小數(shù)精度丟失的完美解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-05-05
  • 在JS中解析HTML字符串示例代碼

    在JS中解析HTML字符串示例代碼

    這篇文章主要介紹了在JS中如何解析HTML字符串,需要的朋友可以參考下
    2014-04-04
  • 微信小程序自定義modal彈窗組件的方法詳解

    微信小程序自定義modal彈窗組件的方法詳解

    這篇文章主要給大家介紹了關(guān)于微信小程序自定義modal彈窗組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • js實(shí)現(xiàn)日期顯示的一些操作(實(shí)例講解)

    js實(shí)現(xiàn)日期顯示的一些操作(實(shí)例講解)

    下面小編就為大家?guī)硪黄猨s實(shí)現(xiàn)日期顯示的一些操作(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • JS進(jìn)階之從多線程到Event?Loop全面梳理

    JS進(jìn)階之從多線程到Event?Loop全面梳理

    JS是通過事件隊(duì)列(Event?Loop)的方式來實(shí)現(xiàn)異步回調(diào)的,但對很多初學(xué)JS的人來說,根本搞不清楚單線程的JS為什么擁有異步的能力,所以本文將從進(jìn)程、線程的角度來解釋這個(gè)問題
    2023-05-05
  • ionic中列表項(xiàng)增加和刪除的實(shí)現(xiàn)方法

    ionic中列表項(xiàng)增加和刪除的實(shí)現(xiàn)方法

    在項(xiàng)目中遇到表單似的頁面,需要進(jìn)行增加一行和減少一行的操作,基于ionic怎么實(shí)現(xiàn)呢?下面小編給大家分享ionic中列表項(xiàng)增加和刪除的實(shí)現(xiàn)方法,一起看看吧
    2017-01-01
  • PDF.js前端開發(fā)使用代碼示例及實(shí)用技巧

    PDF.js前端開發(fā)使用代碼示例及實(shí)用技巧

    pdf.js是一款Nozilla開發(fā)的、用于網(wǎng)頁上顯示pdf文檔的Javascript庫,提供pdf文件的在線閱讀,這篇文章主要給大家介紹了關(guān)于PDF.js前端開發(fā)使用實(shí)用技巧的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04

最新評論

通河县| 广德县| 三江| 汽车| 北宁市| 剑阁县| 尚志市| 界首市| 六盘水市| 吴桥县| 依安县| 鄂托克旗| 广宁县| 时尚| 循化| 安新县| 中西区| 丹阳市| 白城市| 沁水县| 昆明市| 邵武市| 阳城县| 云南省| 黑龙江省| 拜城县| 永昌县| 镇远县| 沂南县| 武义县| 平乡县| 韶山市| 外汇| 望奎县| 个旧市| 射阳县| 马山县| 云林县| 景宁| 壶关县| 原平市|