欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Node.js中require()的工作原理是什么

這篇文章給大家分享的是有關Node.js中require()的工作原理是什么的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)成立10余年來,這條路我們正越走越好,積累了技術與客戶資源,形成了良好的口碑。為客戶提供做網站、成都網站建設、網站策劃、網頁設計、域名與空間、網絡營銷、VI設計、網站改版、漏洞修補等服務。網站是否美觀、功能強大、用戶體驗好、性價比高、打開快等等,這些對于網站建設都非常重要,創(chuàng)新互聯(lián)通過對建站技術性的掌握、對創(chuàng)意設計的研究為客戶提供一站式互聯(lián)網解決方案,攜手廣大客戶,共同發(fā)展進步。

大多數人都知道Node.js中require()函數做什么的,但是有多少人知道它的工作原理呢?我們每天使用它加載庫包和模塊,但是它的內部行為原理很神秘。

我們追尋Node模塊系統(tǒng)的核心: module.js,這個文件包含一個令人驚訝的神奇功能,它負責加載 編譯和緩存每個用過的文件,讓我們揭開它的神秘面紗。

function Module(id, parent) { 
  this.id = id; 
  this.exports = {}; 
  this.parent = parent; 
  // ...

在module.js中可以發(fā)現(xiàn)這個Module類型,扮演兩個主要角色:首先,它提供一個所有Node.js模塊從其文件被加載時構建一個實例的基礎功能,甚至在文件運行時持久,這就是為什么我們能夠將一些屬性加入module.exports,并在需要時返回它們。

module的第二個事情是處理Node模塊的加載機制,標準的require函數其實是基于module.require的抽象,后者只是一個對Module._load的簡單包裝,加載方法處理每個文件的實際加載??纯此拇a大概如下:

Module._load = function(request, parent, isMain) { 
  // 1.在Module._cache中檢查模塊是否被緩存
  // 2.如果緩存中為空,創(chuàng)建一個新的模塊實例。
  // 3. 保存到緩存
  // 4. 使用指定的名稱調用module.load() 
  //    在讀取了文件內容后將調用module.compile() 
  // 5.如果加載和分析文件時有錯誤
  //    從緩存中刪除壞的模塊
  // 6. 返回 module.exports 
};

Module._load負責加載新的模塊并且管理模塊緩存,緩存每個模塊能夠降低文件的讀取頻率,從而提高性能,共享模塊實例允許像單例模塊那樣跨應用保存狀態(tài)。

如果一個模塊在緩存中不存在,Module._load將讀取文件創(chuàng)建一個新的,讀取文件內容成功后會調用module._compile

如果你注意上面第六步,你會看到返回的是module.exports,這就是為什么當你定義公共接口時,可以使用exports和module.exports,因為它們確實是Model._load和require返回的。

下面看看module._compile:

Module.prototype._compile = function(content, filename) { 
  // 1. 創(chuàng)建調用模塊需要的require標準函數
  // 2.將其他幫助方法加入require. 
  // 3.包裝JS代碼到一個函數,這個函數提供我們的require
  //  模塊, 比如變量本地化到模塊的作用域
  // 4.返回這個函數
};

這里有魔術發(fā)生,首先,一個特殊的標準require函數將被創(chuàng)建,這就是我們熟悉的require()函數,當函數自己包裝了Module.require,它還包含一些很少人知道的幫助屬性和方法,如:

  • require():加載一個外部模塊

  • require.resolve(): 根據其絕對路徑解決模塊名稱

  • require.main: 主要的模塊

  • require.cache: 所有緩存模塊

  • require.extensions: 基于文件的擴展名可用于編譯的方法。

一旦require準備就緒,整個源碼將被包裝進一個新的函數,這個函數有require module和exports和其他暴露變量作為參數,這創(chuàng)建了模塊的一個新函數作用域,這樣就不會污染Node.js環(huán)境的其余部分。

(function (exports, require, module, __filename, __dirname) { 
  // YOUR CODE INJECTED HERE! 你的代碼在這里
});

最后,這個包裝了模塊的函數將運行,整個Module._compile方法同步執(zhí)行,這樣原來對Module._load方法調用將會等待這個代碼運行,然后才會完成,返回module.exports給用戶。

現(xiàn)在,我們已經知道require('模塊')是如何通過模塊系統(tǒng)加載你定義的模塊的, module.js source code包含更多代碼原理,如果你有興趣可以發(fā)現(xiàn)更多。

感謝各位的閱讀!關于Node.js中require()的工作原理是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

網站欄目:Node.js中require()的工作原理是什么
網站網址:http://aaarwkj.com/article32/jjihpc.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站收錄動態(tài)網站、用戶體驗、虛擬主機、小程序開發(fā)、域名注冊

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網站建設
欧美大吊视频在线观看| 久久精品国产精品日韩欧美| 日本韩国亚洲三级在线| 中文日韩av在线免费播放| 日韩一区二区三区无吗电影| 人妻黄色这里只有精品| 国产成人综合久久精品推荐| 最新91精品国产自产在线| 和富婆啪啪一区二区免费看| 日本午夜福利视频在线观看| 亚洲欧洲国产视频一区二区| 午夜视频免费在线观看| 国产激情久久久久久影院| 熟妇人妻内射一区二区三区| 九九热视频这里是精品| 人妻久久久久久精品99| 丰满人妻视频一二三区| 国产精品夫妇在线激情啪| 不卡av免费在线网址| 天天日天天天干夜夜操| 久久亚洲精品中文字幕一| 亚洲熟女午夜毛片av毛片| 亚洲国产欧美日韩一区| 亚洲一区二区三区精品电影网 | 自拍偷拍一区蜜桃视频| 亚洲国产欧美日韩在线一区| 亚洲国产精品成人久久66| 日本人妻在线一区二区三区| 日韩精品中文字幕欧美乱| 亚洲午夜精品美女写真| 国产片中文字幕在线观看| 漂亮人妻少妇中文字幕| 国产放荡av剧情精品| 日韩中文字幕免费一区二区| 99热这里只有精品最新| 高清区一区二区在线播放| 日韩精品中文字幕有码| 日本91大神在线观看| 欧美黄色一区二区在线观看| 人人妻夜夜天天俺去添噜| 国产精品麻豆色哟哟av|