webpack最簡單的入門教程裡bundle.js之執行單步除錯的原理解析
讀這篇文章的朋友,請確保對webpack有最基礎的認識。
您可以閱讀我前一篇文章:Webpack 10分鐘入門 來在本地執行一個Webpack的hello world專案。 https://www.toutiao.com/i6612879647568822788/
我這裡可以在回顧一下這個web pack的hello world專案。
用webpack打包之後,專案資料夾裡包含了這些資源:
index.html的原始碼很簡單,就包含了一個webpack打包後生成的bundle.js檔案:
那麼執行時,Hello,Jerry的字串是如何通過bundle.js列印出來的呢?
這就是本文要闡述的內容。我們可以從bundle.js第一行設定斷點,然後開始除錯:
把我們web工程裡定義的兩個module注入到 webpack_require .m裡:
因為我們在webpack.config.js裡定義的入口模組為main.js:
在bundle.js裡此處進行執行時載入:return webpack_require ( webpack_require .s = "./main.js");
webpack_require 函式本來就是在bundle.js裡定義的:
首先檢查main.js是否已經裝載在記憶體裡了:
對於我這個例子,顯然沒有,所以從頭開始裝載main.js.首先建立一個物件,id為./main.js:
然後執行這個module的函式,即我們實現在main.js裡的javascript程式碼。當然經過webpack的加工,main.js裡的程式碼已經通過eval的方式嵌入到bundle.js裡了。
原始的main.js程式碼:
上述程式碼被webpack轉換之後,main.js裡的原始碼被替換成了 webpack_require :
從這裡也能看出webpack遞迴處理module的思路,從webpack.config.js定義的entry module,即main.js出發,在main.js遇到需要require其他mobule的地方,遞迴進入 webpack_require :
require("print.js")的執行過程,就是把print.js裡定義的print函式本身,賦給module的exports屬性:
print.js module裝載完畢之後,就可以執行了。
注意第2行程式碼執行完畢後,html頁面就出現了期望的字元:
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2216990/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 單步除錯理解webpack裡通過require載入nodejs原生模組實現原理除錯WebUINodeJS
- 最簡單的docker教程:在docker裡執行nginx伺服器DockerNginx伺服器
- cy.visit 執行邏輯的單步除錯除錯
- 簡單的 Go 入門教程Go
- 最簡單易懂的ChatGPT入門指南!ChatGPT
- Kdevelop的簡單使用和簡單除錯dev除錯
- Google Chrome 除錯JS簡單教程GoChrome除錯JS
- 簡單的 Shell 指令碼入門教程指令碼
- NgRx Store createSelector 返回的 selector 執行取數邏輯的單步除錯除錯
- 除錯Kubernetes工作負載的最簡單方法 - Martin除錯負載
- jasmine.objectContaining 的單步除錯ASMObjectAI除錯
- 簡單的沙箱反除錯除錯
- TypeScript 類裝飾器的一個例子和使用單步除錯搞清楚其執行原理TypeScript除錯
- SAP UI5 框架是如何執行 batch 請求的單步除錯UI框架BAT除錯
- MongoDB最簡單的入門教程之三 使用Java程式碼往MongoDB裡插入資料MongoDBJava
- MongoDB最簡單的入門教程之二 使用nodejs訪問MongoDBMongoDBNodeJS
- Spark Streaming簡單入門(示例+原理)Spark
- python如何單步除錯Python除錯
- 簡單介紹vscode除錯container中的程式的方法步驟VSCode除錯AI
- Swoole 如何使用 Xdebug 進行單步除錯除錯
- MongoDB最簡單的入門教程之五-通過Restful API訪問MongoDBMongoDBRESTAPI
- [2]SpinalHDL教程——Scala簡單入門
- 最簡單的SpringBoot整合MyBatis教程Spring BootMyBatis
- NoSLQ之MongoDB簡單入門MongoDB
- 一鍵執行實時的修改,讓Qt遠端除錯更簡單QT除錯
- 來了老弟,最簡單的Promise原理Promise
- 簡單分析ThreadPoolExecutor回收工作執行緒的原理thread執行緒
- Laravel 一個簡單的除錯工具Laravel除錯
- Python+Appium執行簡單的demo,你需要理解Appium執行原理!PythonAPP
- drools的簡單入門案例
- 簡單的執行緒池執行緒
- SAP UI5 SmartTable 控制元件本地執行時進行 Excel 匯出的單步除錯UI控制元件Excel除錯
- rxjs Observable of 操作符的單步除錯分析JS除錯
- ASP入門教程 1小時ASP入門,非常簡單
- Node 除錯工具入門教程除錯
- 除錯篇——斷點與單步除錯斷點
- 入門篇-其之八-常用類的簡單使用
- rust學習二、入門之執行單個指令碼Rust指令碼