九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
單步調(diào)試理解webpack里通過require加載nodejs原生模塊實現(xiàn)原理

在webpack和nodejs里,我們經(jīng)常使用require函數(shù)加載原生模塊或者開發(fā)人員自定義的模塊。

原生模塊的加載,比如:

const path = require("path");

這個語句是webpack和nodejs應(yīng)用里經(jīng)常使用到的。今天就來談?wù)勊膶崿F(xiàn)原理。

還是通過單步調(diào)試的方式來學習。

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

require函數(shù)的實現(xiàn)位于file:///internal/module.js

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

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

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

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

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

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

那么進入NativeModule.require(filename):

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

因為path模塊顯然是原生模塊,而非開發(fā)人員自己定義的模塊,因此NativeModule.getCached返回了已經(jīng)被預(yù)加載的path模塊.

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

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

要獲取更多Jerry的原創(chuàng)文章,請關(guān)注公眾號"汪子熙"

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【深度好文】我在做前端構(gòu)建過程中的思考
Webpack 原理—如何實現(xiàn)代碼打包
web前端教程:新手應(yīng)該怎么學習webpack
三大應(yīng)用場景調(diào)研,Webpack 新功能 Module Federation 深入解析
前端工具之WebPack解密之背景
在生產(chǎn)環(huán)境配置ES2015+代碼 | Fundebug博客
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服