91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

單步調試理解webpack里通過require加載nodejs原生模塊實現原理

發布時間:2020-08-07 15:13:18 來源:ITPUB博客 閱讀:142 作者:i042416 欄目:web開發

在webpack和nodejs里,我們經常使用require函數加載原生模塊或者開發人員自定義的模塊。

原生模塊的加載,比如:

const path = require("path");

這個語句是webpack和nodejs應用里經常使用到的。今天就來談談它的實現原理。

還是通過單步調試的方式來學習。

大家首先得通過我前一篇文章  webpack打包過程如何調試? 學會如何調試webpack打包過程。

require函數的實現位于file:///internal/module.js

單步調試理解webpack里通過require加載nodejs原生模塊實現原理

注意看第10行和第13行的requireDepth 加減一。因為一個module通過require被加載時,可能會遞歸地加載另外的依賴module,所以需要這個requireDepth字段來記錄加載module的深度。

這個module.js的實際地址位于當前項目文件夾下的node_modules文件夾下面:

單步調試理解webpack里通過require加載nodejs原生模塊實現原理

第11行的mod變量代表什么?

從調試器看出,就是當前命令行node啟動的webpack.js:

單步調試理解webpack里通過require加載nodejs原生模塊實現原理

mod.require(path)會將執行投遞到Module._load函數:

單步調試理解webpack里通過require加載nodejs原生模塊實現原理

首先會去Module._cache里檢查path模塊是否已經加載了。在我這個例子里,path是第一次加載,所以Module._cache是空的。

單步調試理解webpack里通過require加載nodejs原生模塊實現原理

那么進入NativeModule.require(filename):

單步調試理解webpack里通過require加載nodejs原生模塊實現原理

nativeModule,即原生模塊,里面也有cache緩存機制。

單步調試理解webpack里通過require加載nodejs原生模塊實現原理

因為path模塊顯然是原生模塊,而非開發人員自己定義的模塊,因此NativeModule.getCached返回了已經被預加載的path模塊.

cached.exports里包含了一系列函數,這些函數就是我們nodejs應用里經常使用的工具函數,比如join, parse, resolve等等。

單步調試理解webpack里通過require加載nodejs原生模塊實現原理

這就是nodejs和webpack里原生模塊的加載原理。希望對前端開發人員有所幫助。

單步調試理解webpack里通過require加載nodejs原生模塊實現原理


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

东乌珠穆沁旗| 石柱| 京山县| 浦东新区| 原阳县| 清新县| 恩施市| 仙桃市| 武冈市| 鄂托克前旗| 宣化县| 永德县| 宝山区| 甘泉县| 仙游县| 施秉县| 信丰县| 泾源县| 泰兴市| 遵义市| 丰宁| 清水河县| 沁阳市| 上蔡县| 钟山县| 田东县| 吉木萨尔县| 海林市| 徐汇区| 赤峰市| 沙田区| 兴仁县| 利川市| 邳州市| 乌鲁木齐县| 金塔县| 新蔡县| 拜城县| 二连浩特市| 比如县| 中江县|