總結vscode調試vue,nodejs的各種方法



之前寫項目一直都是 console.log()來調試的,浪費了很多時間,現在整理一下用 vscode 對 nuxt(vue)前后端進行調試的方法

前端的調試

chrome+launch

使用 chrome 調試,模式為 launch。不多說,直接上圖
main-b916afa0-86d1-11ea-b455-fb0156fc663d.png
main-c51fe4b0-86d1-11ea-b455-fb0156fc663d.png
main-cff52da0-86d1-11ea-b455-fb0156fc663d.png
main-e0e3e520-86d1-11ea-b455-fb0156fc663d.png
main-edbbdbe0-86d1-11ea-b455-fb0156fc663d.png
當執行到到的位置就會出現
main-393c03b0-86d2-11ea-b455-fb0156fc663d.png

chrome+attach

使用chrome調試,模式為attach,跟launch的區別是不會打開新的瀏覽器窗口
main-5a261200-86d2-11ea-b455-fb0156fc663d.png
main-625c4610-86d2-11ea-b455-fb0156fc663d.png

更新:之前由於疏忽沒發現這里有問題,應該先關閉之前的瀏覽器,然后帶上--remote-debugging-port=9222啟動chrome,再接着下面,如果沒有成功,再去終端看看chrome的參數是否真的帶上了,各系統啟動命令如下

//windows
右鍵點擊 Chrome 的快捷方式圖標,選擇屬性
在目標一欄,最后加上--remote-debugging-port=9222 注意要用空格隔開

//linux
打開控制台執行:
google-chrome --remote-debugging-port=9222

//macos
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222

macos和linux可以使用htop查看,帶上參數后如下圖

main-b87306c0-88ac-11ea-a456-53e3da1dedba.png

然后啟動調試,之后馬上切換到chrome,讓vscode的調試程序可以“粘上”到你的項目
main-6bd7a450-86d2-11ea-b455-fb0156fc663d.png

chrome自帶

使用chrome自帶的調試,在代碼中加入debugger關鍵字即可,也可以直接在chrome,sources控制台處加斷點,即下圖最右邊那個位置,不過由於代碼打包過了,很難在chrome打對斷點的位置,所以建議在vscode打斷點
main-0a44e390-86de-11ea-b455-fb0156fc663d.png

后端調試

node+attach

與上面前端的attach方法幾乎一樣,區別是chorme換成了node,只貼幾個重要的圖

main-b73e5610-86e5-11ea-bb64-d560c82cd964.png
main-c0225650-86e5-11ea-bb64-d560c82cd964.png
main-c846d720-86e5-11ea-bb64-d560c82cd964.png
main-cf7efc20-86e5-11ea-bb64-d560c82cd964.png
debugger和編輯器打的小紅點都是可以觸發的

優點是基本不怎么用配置,缺點是每次啟動都要attach一下

node直接啟動

后面幾種都是直接launch的方法,第一種為node直接啟動的方法,如圖
main-1333acb0-86f3-11ea-8fee-6b187dfcdd6d.png

然后修改launch.json文件吧下面位置的路徑改成你的項目啟動入口
main-254909e0-86f3-11ea-8fee-6b187dfcdd6d.png
main-1b0b4600-86f3-11ea-8fee-6b187dfcdd6d.png

然后需要在后面加上,"console": "integratedTerminal",如果不加的話啟動調試的時候看不見打包進度。而且,需要自動重啟的話要再加上"runtimeExecutable": "nodemon",當然,前提是裝了nodemon

這種方法需要知道入口文件的位置,也可以直接node啟動編譯后的ts文件,在tsconfig.json中把sourcemap設置為true就行了

使用nodejs自帶的devtool

在node啟動命令后面加上--inspect參數,啟動后查看chrome的控制台會發現有個
node的圖標

main-40578450-8914-11ea-b4fc-fdf61b066244.png

點進去之后可以在file選項下找到自己的項目目錄,然后在右邊可以加斷點

main-53d0b740-8914-11ea-b4fc-fdf61b066244.png

官方說明https://nodejs.org/en/docs/guides/debugging-getting-started/
這種方法配置非常簡單,和vscode沒多大關系,不用管vscode,如果知道ts編譯后的入口文件(不知道的去看下tsconfig.json),修改tsconfig.json后可以直接node啟動,在chrome中調試。

npm腳本調試

添加配置的時候選擇通過 npm 啟動,如圖
main-ecd9d920-86f9-11ea-baa7-05bc01eae02a.png
修改配置,其中端口號隨意,並非項目的端口號
main-f71c30e0-86f9-11ea-baa7-05bc01eae02a.png
再修改 pakage.json,添加--inspect,注意這個參數需要放在入口文件之前,否則會提示連不上端口的錯誤。
main-0935acc0-86fa-11ea-baa7-05bc01eae02a.png

針對typescript

除了下面兩種方法,使用前面的attach方法也是可以的,配置非常簡單,推薦使用。

    1. Tsconfig.json中添加或設置"sourceMap": true
  1. 創建launch.json,如果根目錄下有tsconfig.json,vscode會生成如圖的代碼

main-5d811550-86fd-11ea-baa7-05bc01eae02a.png

  1. 然后command+shift+p查找task,或者在首選項設置里面找,點擊配置task
    main-6b9cafa0-86fd-11ea-baa7-05bc01eae02a.png
    拉到最下面,找到構建的那幾項,如果有tsconfig.build.json一般就選這個,沒有就選tsconfig.json
    main-7aab8390-86fd-11ea-baa7-05bc01eae02a.png
    修改task.json文件
    main-90de7f50-86fd-11ea-baa7-05bc01eae02a.png
    修改launch.json文件
    main-61f012c0-86fe-11ea-baa7-05bc01eae02a.png
    main-802b2db0-86fe-11ea-baa7-05bc01eae02a.png
    執行結果
    main-8ca43b90-86fe-11ea-baa7-05bc01eae02a.png
  • 針對typescript第二種方法

    這里主要參考https://segmentfault.com/a/1190000011935122

    直接使用ts-node,和直接使用node調試js項目類似。

    1. 安裝ts-node,npm i ts-node
    2. 創建launch.json,選擇node,上面有這里不再贅述。
    3. 修改launch.json如圖main-9a847dc0-8702-11ea-baa7-05bc01eae02a.png
      其中args表示ts-node后面的參數,這里只填了當前文件
      program選擇ts-node的啟動文件
    4. 切換到項目入口文件,直接啟動調試。main-d9fa3800-8702-11ea-baa7-05bc01eae02a.png這種方法優點是不需要自行編譯ts文件,缺點是要多裝一個包,不能熱啟動

總結

上面的方法基本覆蓋了 js 項目大部分的比較常用的調試方法,而且本人全部測試過(除了最后一種)。有前端有后端,有需要 vscode 和不需要 vscode 的,前端的調試有 chrome 這個神器,非常簡單,后端使用 vscode 的 attach 的方法基本可以應付所有的框架項目,如果不用 vscode 那么直接使用 nodejs 自帶的 devtool+chrome 也可以。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM