日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单步调试理解webpack里通过require加载nodejs原生模块实现原理

發布時間:2023/12/19 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单步调试理解webpack里通过require加载nodejs原生模块实现原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

原生模塊的加載,比如:

const path = require(“path”);

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

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

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

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

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

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

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

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

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

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

那么進入NativeModule.require(filename):

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

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

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

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

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":

總結

以上是生活随笔為你收集整理的单步调试理解webpack里通过require加载nodejs原生模块实现原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。