急速 debug 實戰三(Node - webpack外掛,babel外掛,vue原始碼篇)

藍色的秋風發表於2019-02-19

1.急速 debug 實戰一 (瀏覽器 - 基礎篇)

2.急速 debug 實戰二 (瀏覽器 - 線上篇)

3.急速 debug 實戰三 (Node - webpack外掛,babel外掛,vue原始碼篇)

在我們日常開發中有許多情況下沒有 debug 就會讓我們的開發變得非常的低效,甚至對一些流程的理解變得非常困難。本教程適用於,正在開發 node 應用, webpack 外掛,babel 外掛,想要讀懂別人寫的一些 webpack 外掛,babel 外掛 或者是想要對 vue 原始碼想要更加深入的瞭解。本教程都非常適用。相信你看完教程後,便會對那些看似複雜的東西不再懼怕,即使他們充滿未知,但是能有一個方法去更好地瞭解他們。

示例程式碼倉庫: github.com/hua1995116/…

git clone https://github.com/hua1995116/debug.git

cd debug
複製程式碼

所以示例在以下環境通過。

作業系統: MacOS 10.13.4

Chrome: 版本 72.0.3626.81(正式版本) (64 位)

node 除錯

在 node 基礎除錯中,會給出 chrome 和 vscode 兩種除錯方式,可以根據自己的喜好來進行選擇除錯。(後面為了簡單起見,所有示例都以 vscode 為例子。)

cd node-debug

npm install
複製程式碼

chrome 除錯

示例一:

第一步,開啟 index.js,加上斷點。

const addFn = (a, b) => {
  debugger;
  return a + b;
}

const sum = addFn('1', '2');

console.log(sum);
複製程式碼

第二步,在命令列輸入以下命令

node --inspect-brk index.js
複製程式碼

螢幕快照2019-02-17-01.png

第三步,開啟 chrome ,輸入 chrome://inspect

第四步, 點選 configure ,配置你的地址和埠, 然後回車,點選 done。

螢幕快照2019-02-17-02.png

第五步,點選 Target 下的 inspect。

螢幕快照2019-02-17-03.png

示例二:

第一步,開啟 koa.js,加入斷點

const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
    debugger;
    ctx.body = 'Hello World';
});

app.listen(3000);
複製程式碼

第二步,在命令列輸入以下命令

node --inspect index.js
複製程式碼

第三步,開啟 chrome ,輸入 chrome://inspect

第四步, 點選 Target 下的 inspect。

第五步,在瀏覽器輸入 localhost:3000。便會跳出這個介面。

螢幕快照2019-02-17-04.png

--inspect-brk 和 --inspect 的區別(參考:nodejs.org/en/docs/gui…

vscode 除錯

vscode 除錯就需要一些配置啦。

示例一: index.js

第一步,點選除錯按鈕,選擇新增配置,用預設配置就ok。

螢幕快照2019-02-17-05.png

第二步,回到我們的 index.js 程式碼中,打上一個斷點,vscode 打斷點方式,在某一行程式碼前點選,會出現一個紅點點。

螢幕快照2019-02-17-06.png

第三步,再點選除錯按鈕,點選啟動程式前的箭頭。

螢幕快照2019-02-17-07.png

恭喜你成功了!

示例二: koa.js

第一步,修改我們剛才的launch.json, 將 "program": "${workspaceFolder}/index.js" 改為 "program": "${workspaceFolder}/koa.js"

第二步,按照示例一的方式,給我們程式碼打上斷點。

螢幕快照2019-02-17-08.png

第三步,再點選除錯按鈕,點選啟動程式前的箭頭。

螢幕快照2019-02-17-09.png

第四步,訪問localhost:3000。可以看到,已經進入我們的斷點啦。

螢幕快照2019-02-17-10.png

恭喜你成功了!

webpack外掛、babel外掛

相信如果你在寫外掛的時候通過 console.log 的形式會讓你的外掛開發變得分外的困難和頭疼。還有就是看別人寫的外掛,如果你只會 console.log,那麼也會令原本簡單的事情變得非常複雜。除此之外,除錯的好處就是,能讓你看到 webpack 提供的很多鉤子函式,能夠讓我們不再面對未知。

webpack 外掛除錯

$ cd webpack-plugin-debug

$webpack-plugin-debug npm installl

複製程式碼

第一步,和 node 除錯方式是一樣的,先點選除錯按鈕,新增一個配置,將配置修改成以下的樣子。

lanuch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "啟動程式",
            "cwd": "${workspaceFolder}/myProject",
            "program": "${workspaceFolder}/myProject/node_modules/webpack/bin/webpack.js"
        }
    ]
}
複製程式碼

說明: 因為在兩個不同的目錄,所以我選擇在根目錄進行除錯,並且配置好當前的 cwd (執行根目錄)。

第二步,打上斷點。我們給 myPlugin/plugin.jsvar filelist = 'In this build:\n\n'; 這一行打上斷點。

螢幕快照2019-02-17-11.png

第三步,執行, 啟動程式。

螢幕快照2019-02-17-12.png

到這裡就大功告成,你可以放心地檢視各個變數( Compilation 包含哪些變數), 整個過程是怎麼發生的,都清晰地在我們眼前。

babel 外掛除錯

其實 babel 外掛 和 webpack 外掛是類似的。無非是一些小細節的不一致。我進行簡單地演示,相信優秀的你看了 webpack 外掛除錯後,能夠很快理解。

2019-02-17-21.18.42.gif

兩個注意點:

  • 因為 babel cli 需要定義 引數,所以在 launch.json 的時候需要加上args 引數
  • .babelrc 外掛的路徑是可以這麼寫的。"plugins": [["../babel-plugin/index"]],

原始碼除錯(vue為例)

當你在開發 vue 專案中,是否遇到過這樣的情況,面對一些很奇怪的問題,你會下意識地去百度和谷歌,當然,他們一般來講不會讓你失望,總是能給你一些提示性的幫助,那麼是否思考過這樣一個問題,當出現一個他們沒有遇到過的問題,我們該怎麼辦?相信你心中也會有一個答案,就是,去看原始碼!首先會去 clone 專案,但是原始碼這麼多,就算你很瞭解其結構也記不住這麼多的步驟。

所以這個時候我們需要用除錯的方法,將斷點在打我們熟悉的程式碼中。一步一步慢慢地瞭解其內部的過程。所以學會除錯是能幫助我們更好地瞭解原始碼內部的利器。下面讓我們來看看如何除錯吧。

cd vue-debug

cd vue

npm install 

npm run dev
複製程式碼

例如你想除錯 computed 相關的原始碼。

  1. 可以先在 原始碼 src 目錄下搜尋 相關的關鍵字 (現在我們是 computed), 一搜尋你就能找到一個 initComputed 方法, 檔案位置為 vue/src/core/instance/state.js
  2. initComputed 方法下面加上一個 debugger
function initComputed (vm: Component, computed: Object) {
  debugger;
  // $flow-disable-line
  const watchers = vm._computedWatchers = Object.create(null)
  // computed properties are just getters during SSR
  const isSSR = isServerRendering()
  ...
複製程式碼
  1. 然後在瀏覽器開啟 vue-debug 下面 index.html 。

螢幕快照2019-02-17-13.png

接下來你就可以一步一步慢慢地進行除錯了。

如果再到某個細節,你可以繼續寫入 debugger。 具體細節打算後面會出一篇原始碼的文章, 畢竟大家學會整個技能已經會自己除錯了,所以講的不多。(溜了溜了

結尾

看完了本教程,希望對大家有所幫助~,對各種外掛以及原理不再懼怕,如果有更好地除錯方式,歡迎評論來秀一波操作。

更多請關注

友情連結: huayifeng.top/

急速 debug 實戰三(Node - webpack外掛,babel外掛,vue原始碼篇)

相關文章