在vscode中调试NodeJS

364 阅读3分钟

之前工作中的调试都是在浏览器中打断点,debugger,几乎很少在vscode中调试过代码,主要原因是需要自己去配置调试功能(懒癌晚期。。。),没有浏览器直接上手简单,粗暴。但是最近开始接触了Node后端服务,没有页面可以去调试,只能通过IDE去调试。那就来搞一下吧。

目前市面上IDE很多,像webstorm,vscode等,就我们今天说的调试功能webstrom就可以直接调试,服务跑起来,在需要调试的地方打上断点,再去访问接口就能直接debug进来了,那为什么还要使用vscode呢,既不能直接调试,又要去辛苦的配置,一个字 ,webtorm是收费的,而vscode是完全免费的。就这一个就让我爱上了vscode了。

闲话说多了,开始我们今天的主题,使用vscode调试代码并没有想象中的那么复杂,只需要打开左侧菜单栏的调试菜单就可以开启vscode代码调试的大门了。

然后你就可以看到代码调试的功能区了,这里vscode也给你做了足够多的操作提示,开启调试的前提是创建一个名字叫launch.json的文件,它里面包含了调试配置的各个参数,初始化的配置很简单,它会根据你选择的调试环境来生成相应的配置文件。

// chrome环境
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "pwa-chrome", // 启动配置的调试器类型
      "request": "launch", // 启动配置的请求类型。
      "name": "Launch Chrome against localhost", // 显示在调试启动配置下拉列表中的易于阅读的名称
      "url": "http://localhost:8080", // 本地服务的启动地址
      "webRoot": "${workspaceFolder}" // 项目的根路径
    }
  ]
}

上面是选择Chrome浏览器环境生成的配置文件。因为我要调试的NodeJS,所以选择了Node环境

// NodeJS环境
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "pwa-node",
      "request": "launch",
      "name": "Launch Program",
      "skipFiles": [ // 跳过的文件,比如一下node的依赖文件,或者node_modules包的代码
        "<node_internals>/**"
      ],
      "program": "${file}" // node的启动文件路径
    }
  ]
}

相比之下其实并没有太多不同,简单配置之后就能愉快的调试了。

还有一些其他的属性可以按需配置

  • program - 启动调试器时要运行的可执行文件或文件
  • args - 传递给程序以进行调试的参数
  • cwd - 用于查找依赖项和其他文件的当前工作目录
  • port - 附加到正在运行的进程时的端口
  • stopOnEntry - 程序启动时立即中断
  • console-什么样的控制台来使用,例如internalConsoleintegratedTerminalexternalTerminal

本以为就这样愉快的结束了,但是当我去启动的时候却报错了,一看报错,原来是当下的node服务启动的时候需要去根据运行时的环境读取对应的配置文件,之间本地启动之前都是事先手动设置的set ENV=dev,那是否也可以在命令行事先设置呢,去尝试了下,因为开启调试,vscode会自动在终端重新打开一个新的窗口,不会使用之前已经存在的,那我们设置的环境变量就没有用了,那该怎么办呢???

遇事不绝问度娘,通过跟度娘的一番深入交谈以后我,发现可以通过新增一个env的配置来设置启动时候的环境变量,也可以使用envFile配置来读取项目配置的环境变量文件,不要太方便...

   //...
   "envFile": "${workspaceFolder}/.env",
   "env": { "USER": "john doe" }
   //...

设置完之后,我的Node服务调试就启动起来了,设置的断点也可以正常debug了,真香!!!

总结

vscode的调试功能还是很香的,今后这块可以熟练的使用起来了,不需要在来回的切换编辑器和浏览器了,

附上今天读到的一段话

滚石不生苔,流水不生蠹。忙,才能发挥生命的力量,忙,才能是我们身心灵活起来,经云:“若行者之心数数懈废,譬如钻火,未热而熄,虽欲得火,火难可得。” 又说:“人所欲为,譬如穿池,凿之不止,比得泉水。”

坚持就是胜利,你的努力从来都不会辜负你自己。


参考文献:code.visualstudio.com/docs/editor…

\