做者:Charles Szilagyi翻譯:瘋狂的技術宅前端
原文:https://charlesagile.com/debu...node
未經容許嚴禁轉載react
此次咱們來研究怎樣把調試器鏈接到用 Create React App 生成的 React 程序。咱們將看到如何從 VS Code 啓動瀏覽器並檢查遠程異步 API 調用。它超級強大,同時又很容易,因此在調試 CRA 和 React 程序時沒有理由不這樣作。git
爲了加快速度,我準備了一個簡單的 React 應用,你要作的就是檢出代碼並啓動 CRA 開發服務器:程序員
git clone git@github.com:thekarel/debug-anything.git cd debug-anything/react-cra yarn # npm i yarn start # npm start
應該能在控制檯中看到啓動成功的消息:github
Compiled successfully! You can now view react-cra in the browser. Local: http://localhost:3000 On Your Network: http://192.168.0.4:3000 Note that the development build is not optimized. To create a production build, use yarn build.
咱們須要爲這個小項目建立一個 launch.json
。請參閱 [VS Code 調試徹底攻略(4):launch.json 和調試控制檯](https://charlesagile.com/vsco...)獲取更多詳細信息。web
代碼中已經包含了這個配置文件。儘管很是簡單,但仍是逐行介紹一下,確保你可以瞭解它都作了些什麼事。打開 .vscode/launch.json
:面試
看一下第 8 至 12 行:chrome
{ "type": "chrome", "request": "launch", "name": "Debug CRA web app in Chrome", "url": "http://localhost:3000", "webRoot": "${workspaceFolder}/react-cra" }
type
:把調試器類型設置爲 chrome
,這意味着咱們將在此配置中使用 Chrome 瀏覽器。咱們以前用過的另外一種類型是 node
,經過安裝擴展能夠獲得更多其餘類型。順便說一下,還有一個爲 Firefox🦊 準備的插件npm
每一個調試器
type
都有其特定的配置,因此請試着用 VS Code 隨附的便捷自動完成功能。
request
:被設置的 launch
選項意味着咱們將會啓動瀏覽器進行調試,並將加載下面指定的地址。它與你手動執行的操做並無太大區別,可是會自動爲你執行代碼。另外一種可能性是 attach
到已經運行的調試服務器,這在當前的配置下是不可能的。最後,當你中止調試會話時,VS Code 會負責關閉 Chrome。
name
:你喜歡的任何名稱,它將顯示在調試工具欄中:
url
:瀏覽器將要加載的URL——必須與運行 CRA 開發服務器的 URL 相匹配!
webRoot
:項目源文件的路徑。 不幸的是,Source map 在 CRA 開發模式下並不可靠*。
那麼怎樣才能把這些都聯繫在一塊兒呢?調試過程由如下步驟組成。
首先,你能夠用 npm start
在控制檯中啓動開發服務器,順便說一下,這也能夠在 VS Code 中完成。
接下來,從調試側邊欄中或經過按 F5
鍵啓動調試瀏覽器:
像往常同樣向代碼添加斷點:
而後在調試瀏覽器中與網站進行交互,可是此次啓用了調試功能💪讓咱們來看看在示例程序中成功的 fetch
是什麼樣子的:
能夠經過使用工具欄中的 「restart」 來從新啓動會話並使應用恢復到原始狀態:
你可能想知道,這是否會比在「普通的」 Chrome 中打開頁面並使用 dev tools 更好?在這種狀況下差別並不大。可是一個明顯的好處是,即便關閉瀏覽器或退出代碼,也能夠保留斷點。這也適用於監視表達式!說到監視表達式。。。
咱們已經學會了怎樣檢查和編輯局部變量。轉到變量部分並查看其值是可行的。不過當你要處理複雜的對象時,重複打開嵌套結構會變得很煩人。
VS Code 提供了一個更溫馨的解決方案:你能夠設置 監視表達式,該表達式會在每一個調試步驟中從新評估。甚至能夠用點符號來查詢嵌套屬性(例如post.title
)。
確保在調試側欄中打開了 Watch,並添加了一些表達式:
讓咱們嘗試 fetch 一個存在的內容,並留意表達式:
經過這些表達式,也很容易檢查出問題的路徑,此次注意 error
:
你可能已經猜到了,上面所用到的方法適用於任何基於瀏覽器的應用。在這種狀況下,要作的設置大體以下: