欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

var mod = require('module_name')

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

這里列下node模塊的載入及緩存機制

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

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

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

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

var http = require('http')

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

二、載入文件模塊

絕對路徑的

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


或相對路徑的

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


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

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

  
三、載入文件目錄模塊

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

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

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

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

package.json定義如下

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

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

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

四、載入node_modules里的模塊

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

不必擔心,npm命令可讓我們很方便的去安裝,卸載,更新node_modules目錄。

五、自動緩存已載入模塊

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

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是相同的,即兩個引用都指向了同一個模塊對象。

相關(guān)文章

  • 微信小程序如何根據(jù)不同用戶切換不同TabBar(簡單易懂!)

    微信小程序如何根據(jù)不同用戶切換不同TabBar(簡單易懂!)

    小程序中我們可能需要根據(jù)不同的權(quán)限展示不同的tabbar,下面這篇文章主要給大家介紹了關(guān)于微信小程序如何根據(jù)不同用戶切換不同TabBar的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • JavaScript 事件的一些重要說明

    JavaScript 事件的一些重要說明

    關(guān)于JavaScript中事件的一些重要說明,需要的朋友可以參考下。
    2009-10-10
  • JS中欺騙詞法作用域的eval和with詳解

    JS中欺騙詞法作用域的eval和with詳解

    詞法作用域就是定義在詞法階段的作用域,如果詞法作用域完全由寫代碼期間函數(shù)所聲明的位置來定義,怎樣才能在運行時來“修改”(也可以說欺騙)詞法作用域呢?JavaScript 中有兩種機制來實現(xiàn)這個目的,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • iconfont的三種使用方式詳解

    iconfont的三種使用方式詳解

    這篇文章主要介紹了iconfont的三種使用方式,需要的朋友可以參考下
    2018-08-08
  • JavaScript對象屬性檢查、增加、刪除、訪問操作實例

    JavaScript對象屬性檢查、增加、刪除、訪問操作實例

    這篇文章主要介紹了JavaScript對象屬性檢查、增加、刪除、訪問操作實例,本文分別給出代碼實例來講解如何給對象增加屬性、檢查屬性存在、以及刪除和訪問屬性,需要的朋友可以參考下
    2015-07-07
  • 淺談js函數(shù)三種定義方式 & 四種調(diào)用方式 & 調(diào)用順序

    淺談js函數(shù)三種定義方式 & 四種調(diào)用方式 & 調(diào)用順序

    下面小編就為大家?guī)硪黄獪\談js函數(shù)三種定義方式 & 四種調(diào)用方式 & 調(diào)用順序。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 懸浮廣告方法日常收集整理

    懸浮廣告方法日常收集整理

    這篇文章主要介紹了懸浮廣告方法日常收集整理的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • js控制文本框輸入的字符類型方法匯總

    js控制文本框輸入的字符類型方法匯總

    這篇文章主要給大家匯總介紹了js控制文本框輸入的字符類型的各種方法,十分的簡單實用,有需要的小伙伴可以參考下。
    2015-06-06
  • js實現(xiàn)轉(zhuǎn)動骰子模型

    js實現(xiàn)轉(zhuǎn)動骰子模型

    這篇文章主要為大家詳細介紹了js實現(xiàn)轉(zhuǎn)動骰子模型,自動隨機生成骰子數(shù)的模型,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 微信小程序scroll-x失效的完美解決方法

    微信小程序scroll-x失效的完美解決方法

    在微信小程序的文檔中,使用scroll-view標簽,然后給它設(shè)置一個scroll-x就可以實現(xiàn)元素,橫向排列,可以左右滑動,但是在實際開發(fā)中會遇到各種問題,下面小編給大家?guī)砹宋⑿判〕绦騭croll-x失效的完美解決方法,需要的朋友可以參考下
    2018-07-07

最新評論