單步除錯理解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裡原生模組的載入原理。希望對前端開發人員有所幫助。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2217003/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- webpack模組非同步載入原理解析Web非同步
- webpack最簡單的入門教程裡bundle.js之執行單步除錯的原理解析WebJS除錯
- nodeJS 爬蟲,通過Puppeteer實現滾動載入NodeJS爬蟲
- 【nodejs原理&原始碼賞析(5)】net模組與通訊的實現NodeJS原始碼
- nodejs模組載入分析(1).mdNodeJS
- NodeJS的模組原理NodeJS
- Linux核心模組驅動載入與dmesg除錯Linux除錯
- Webpack 模組打包原理Web
- Python實現模組熱載入Python
- 實現 CommonJs 規範中的 Require 模組JSUI
- 進擊的模組化+webpack的簡單實現Web
- 基於CommonJS規範,簡單實現NodeJs模組化NodeJS
- Swoole 中通過 process 模組實現多程式
- 淺度理解NodeJS的HTTP模組NodeJSHTTP
- 深入理解React:懶載入(lazy)實現原理React
- 自己動手實現java斷點/單步除錯(二)Java斷點除錯
- 自己動手實現java斷點/單步除錯(一)Java斷點除錯
- webpack打包過程如何除錯?Web除錯
- webpack,非同步載入,程式碼分割,require.ensureWeb非同步UI
- 概述nodejs模組系統核心原理NodeJS
- 通過單步除錯的方式學習 Angular 中 TView 和 LView 的概念除錯AngularView
- 日誌庫 winston 的學習筆記 - logger.info 的實現原理單步除錯筆記除錯
- python如何單步除錯Python除錯
- webpack 非同步載入原理Web非同步
- Nginx通過geo模組設定白名單Nginx
- 深入Node.js的模組載入機制,手寫require函式Node.jsUI函式
- Layui 原始碼淺讀(模組載入原理)UI原始碼
- webpack是如何實現前端模組化的Web前端
- Android HAL模組的載入過程Android
- 使用require.context實現優雅的預載入UIContext
- 【轉載】Linux核心除錯之使用模組引數Linux除錯
- 單步除錯找到 cy.visit 的實現原始碼(二) - WebSocket?除錯原始碼Web
- Laravel 通過 Macros 實現列印原生 MySQLLaravelMacROSMySql
- nodejs除錯指南NodeJS除錯
- 程式碼除錯-入門、實踐到原理除錯
- 深入理解Android逆向除錯原理Android除錯
- Linux—gdb除錯簡單實現Linux除錯
- 通過Gradle自動實現Android元件化模組構建GradleAndroid元件化