為什麼讀webpack原始碼
- 因為前端框架離不開webpack,天天都在用的東西啊,怎能不研究
- 讀原始碼能學到很多做專案看書學不到的東西,比如說架構,建構函式,es6很邊緣的用法,甚至給函式命名也會潛移默化的影響等
- 想寫原始碼,不看原始碼怎麼行,雖然現在還不知道寫什麼,就算不寫什麼,看看別人寫的總可以吧
- 知道世界的廣闊,那麼多外掛,那麼多軟體開發師,他們在做什麼,同樣是寫js的,怎麼他們能這麼偉大
- 好奇心
本以為用框架以及用熟練後,到達了一個美麗的小湖泊,讀原始碼發現原來還有一望無際的海洋,壯麗的雪山,浩淼的星辰。
讀webpack對面試也沒什麼用(刷leetcode,面試題更有用),你說你看webpack學會了啥,一時半會也說不清楚,但就是想看,想就去做,只要不危害他人
為什麼寫webpack原始碼系列文章部落格
- 我可以只讀不寫的,這樣還讀的更快,只是後面想起了,不知道讀了啥,讀vue的時候好多都沒有記錄,但是即便那樣當我再次看到那個函式我知道那是做什麼
- 給公司寫的專案程式碼,如果專案被砍,感覺白寫了一樣
- 為了證明自己的存在,證明自己來過
- 如果通過看這個文章你能能學到絲毫的知識,是我之幸✌️
看這個你能學到什麼
如果你想知道webpack的演算法實現
我建議你看這個git地址
雖然寫的不夠好,但是已經是我能找到的中寫的最好的
裡面更多記錄了怎麼跟蹤的過程
你能學到如何除錯以及閱讀原始碼
知道webpack頁面架構
webpack哪些模組實現了什麼功能
如何讀webpack
準備
自己用webpack搭建一個專案,甚至是現成的讀webpack都可以
當你npm run build 發生了什麼?
參考npm的run-script文件
npm run會自動新增node_module/.bin 到當前命令所用的PATH變數中,
因此,npm run build 會執行package.json配置的build,目前我配置的是webpack,
實際會呼叫 node_modules/.bin/webpack
開啟專案找到node_modules/.bin/webpack,需要點耐心,需要翻很多
webpack是一個符號連線
指到了webpack/bin/webpack.js
log大法
第一行是
#!/usr/bin/env node
它被稱為 Shebang。
/usr/bin/env 不是一個路徑,而是一個命令,
後面跟node 引數,就會找到node並呼叫它。
$ /usr/bin/env node --version
v10.11.0
log 除錯
用這個列印log會區分顏色,事實上我用著,也沒那麼好用
順便講一下吧
安裝
npm i -D debug
在要除錯的檔案中
定義
const log = require(`debug`)(`debug-webpack webpack webpack.js`);
log(`你想列印的`)
請把react-beauty-highcharts替換成你的檔名,這樣才會有log
DEBUG=react-beauty-highcharts* npm run build
這個有個缺點就是如果json比較大,每一行都會列印一遍debug-webpack webpack webpack.js名字,不好複製,還是console.log() 好使
我們開啟檔案,裡面主要處理了一些安裝的邏輯
沒安裝包報錯之類的
找到
const cliPath = path.resolve(path.dirname(pkgPath), pkg.bin[installedClis[0].binName]);
// 引入了路徑看到列印了路徑是node_modules/webpack-cli/bin/cli.js
require(cliPath);
接下來開啟webpack-cli/bin/cli.js
241行
let options;
try {
options = require("./convert-argv")(argv);
} catch (err) {
}
我們分析convert-argv模組
想有更好的視覺效果
傳送門vuepress 效果檢視