详解如何在vscode里面调试js和node.js的方法步骤


Posted in Javascript onDecember 24, 2018

在开发的过程中,几乎不可能一次性就能写出毫无破绽的程序,断点调试代码是一个普遍的需求。

作为前端开发工程师,以往我们开发的JavaScript程序都运行在浏览器端,利用Chrome提供的开发者工具就可以方便的进行源码断点调试。其步骤有四,详情不表,粗略概括如下:

1.打开Chrome开发者工具;
2.点击进入Sources标签页,在页面的左侧就能看到JS代码的目录;
3.找到需要设置断点的源文件,在需要中断的哪行代码左侧单击鼠标左键,就可以设置断点,如果你的代码是uglify过的,则需导入相应的source-map来映射源码。
4.刷新页面(如果设置断点的位置是一个事件处理函数,则直接触发这个事件即可),代码运行到断点处的时候,程序就会挂起,这时候用鼠标hover就可以查看当前各个变量的数值,并以此判断程序是否正常运行了。

但是,当我们用JavaScript开发运行在服务端的Node.js程序时,Chrome开发者工具暂时派不上用场了。虽然也有办法实现在Chrome上调试,不过这不是今天我们讨论的范围。

还有,说用console.log的那位同学,请你先不要说话…

实际上,许多IDE都集成了Debug的功能,包括较新版本的WebStorm就对Node.js调试支持得很好。

但是很多开发人员会觉得IDE太重,有没有更轻量级一些的工具来实现断点调试呢?今天就要给大家安利一下在VScode上进行断点调试的方法。

一般大家调试都是在浏览器端调试js的,不过有些时候也想和后台一样在代码工具里面调试js或者node.js,下面介绍下怎样在vscode里面走断点。

1,用来调试js

一:在左侧扩展中搜索Debugger for Chrome并点击安装:

详解如何在vscode里面调试js和node.js的方法步骤

二:在自己的html工程目录下面点击f5,或者在左侧选择调试按钮

详解如何在vscode里面调试js和node.js的方法步骤

,在上方

详解如何在vscode里面调试js和node.js的方法步骤

,选择下拉按钮,会有一个添加,选择chrome

详解如何在vscode里面调试js和node.js的方法步骤

3:之后会出现laungh.json的配置文件在自己的项目目录下面

详解如何在vscode里面调试js和node.js的方法步骤

4:不过对于不同的代码文件要调试的话,每次都需要修改一下配置文件

{
  "version": "0.2.0",
  "configurations": [{
      "type": "chrome",
      "request": "launch",
      "name": "Launch Chrome against localhost",
      "url": "http://localhost:8080",
      "webRoot": "${workspaceRoot}"
    },
    {
      "type": "chrome",
      "request": "attach",
      "name": "Attach to Chrome",
      "port": 9222,
      "webRoot": "${workspaceRoot}"
    },
    {
      "name": "Launch index.html (disable sourcemaps)",
      "type": "chrome",
      "request": "launch",
      "sourceMaps": false,
      "file": "${workspaceRoot}/jsTest/test1/test1.html" #每次需要修改这里的文件地址
    }
  ]
}

5:到这里就可以进行调试了,在

详解如何在vscode里面调试js和node.js的方法步骤

中选择 Launch index.html (disable sourcemaps) 调试项,按f5调试,会出现,同时打开goole浏览器,点击

详解如何在vscode里面调试js和node.js的方法步骤

,即可进入调试阶段

2,用来调试node.js

调试nodejs有很多方式,可以看这一篇 https://blog.risingstack.com/how-to-debug-nodej-js-with-the-best-tools-available/,

其中我最喜欢使用的还是V8 Inspector和vscode的方式。

在vscode中,点击那个蜘蛛的按钮

详解如何在vscode里面调试js和node.js的方法步骤

就能看出现debug的侧栏,接下来添加配置

详解如何在vscode里面调试js和node.js的方法步骤

选择环境

详解如何在vscode里面调试js和node.js的方法步骤

就能看到launch.json的文件了。

详解如何在vscode里面调试js和node.js的方法步骤

启动的时候,选择相应的配置,然后点击指向右侧的绿色三角

详解如何在vscode里面调试js和node.js的方法步骤

launch模式与attach模式

{
 "version": "0.2.0",
 "configurations": [
  {
   "type": "node",
   "request": "launch",
   "name": "Launch Program",
   "program": "${workspaceRoot}/index.js"
  },
  {
   "type": "node",
   "request": "attach",
   "name": "Attach to Port",
   "address": "localhost",
   "port": 5858
  }
 ]
}

当request为launch时,就是launch模式了,这是程序是从vscode这里启动的,如果是在调试那将一直处于调试的模式。而attach模式,是连接已经启动的服务。比如你已经在外面将项目启动,突然需要调试,不需要关掉已经启动的项目再去vscode中重新启动,只要以attach的模式启动,vscode可以连接到已经启动的服务。当调试结束了,断开连接就好,明显比launch更方便一点。

在debug中使用npm启动

很多时候我们将很长的启动命令及配置写在了package.json的scripts中,比如

"scripts": {
 "start": "NODE_ENV=production PORT=8080 babel-node ./bin/www",
 "dev": "nodemon --inspect --exec babel-node --presets env ./bin/www"
},

我们希望让vscode使用npm的方式启动并调试,这就需要如下的配置

{
 "name": "Launch via NPM",
 "type": "node",
 "request": "launch",
 "runtimeExecutable": "npm",
 "runtimeArgs": [
  "run-script", "dev"  //这里的dev就对应package.json中的scripts中的dev
 ],
  "port": 9229  //这个端口是调试的端口,不是项目启动的端口
},

在debug中使用nodemon启动

仅仅使用npm启动,虽然在dev命令中使用了nodemon,程序也可以正常的重启,可重启了之后,调试就断开了。所以需要让vscode去使用nodemon启动项目。

{
 "type": "node",
 "request": "launch",
 "name": "nodemon",
 "runtimeExecutable": "nodemon",
 "args": ["${workspaceRoot}/bin/www"],
 "restart": true,
 "protocol": "inspector",  //相当于--inspect了
 "sourceMaps": true,
 "console": "integratedTerminal",
 "internalConsoleOptions": "neverOpen",
 "runtimeArgs": [  //对应nodemon --inspect之后除了启动文件之外的其他配置
  "--exec",
  "babel-node",
  "--presets",
  "env"
 ]
},

注意这里的runtimeArgs,如果这些配置是写在package.json中的话,就是这样的

nodemon --inspect --exec babel-node --presets env ./bin/www

这样就很方便了,项目可以正常的重启,每次重启一样会开启调试功能。

可是,我们并不想时刻开启调试功能怎么办?

这就需要使用上面说的attach模式了。

使用如下的命令正常的启动项目

nodemon --inspect --exec babel-node --presets env ./bin/www

当我们想要调试的时候,在vscode的debug中运行如下的配置

{
 "type": "node",
 "request": "attach",
 "name": "Attach to node",
 "restart": true,
 "port": 9229
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
使用jscript实现二进制读写脚本代码
Jun 09 Javascript
按给定几率进行随机抽取的js代码
Dec 28 Javascript
js 连接数据库如何操作数据库中的数据
Nov 23 Javascript
JavaScript中数组的22种方法必学(推荐)
Jul 20 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
Jul 21 Javascript
JavaScript鼠标特效大全
Sep 13 Javascript
详解node HTTP请求客户端 - Request
May 05 Javascript
Angular获取手机验证码实现移动端登录注册功能
May 17 Javascript
angular内置provider之$compileProvider详解
Sep 27 Javascript
微信小程序 上传头像的实例详解
Oct 27 Javascript
vue项目引入Iconfont图标库的教程图解
Oct 24 Javascript
Vue+Element实现动态生成新表单并添加验证功能
May 23 Javascript
@angular前端项目代码优化之构建Api Tree的方法
Dec 24 #Javascript
微信小程序获取用户openid的实现
Dec 24 #Javascript
vue-router启用history模式下的开发及非根目录部署方法
Dec 23 #Javascript
小程序实现人脸识别功能(百度ai)
Dec 23 #Javascript
优雅的elementUI table单元格可编辑实现方法详解
Dec 23 #Javascript
基于webpack4.X从零搭建React脚手架的方法步骤
Dec 23 #Javascript
JavaScript基于数组实现的栈与队列操作示例
Dec 22 #Javascript
You might like
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
php7 安装yar 生成docker镜像
2017/05/09 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
2013/07/13 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
jQuery ajax实现省市县三级联动
2021/03/07 Javascript
vue之数据交互实例代码
2017/06/16 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
2019/06/18 Javascript
laypage.js分页插件使用方法详解
2019/07/27 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
在Vue中使用Echarts实例图的方法实例
2020/10/10 Javascript
使用 Python 获取 Linux 系统信息的代码
2014/07/13 Python
python中reload(module)的用法示例详解
2017/09/15 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
2017/12/28 Python
python定向爬取淘宝商品价格
2018/02/27 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
python操作cfg配置文件方式
2019/12/22 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
PyQT5 实现快捷键复制表格数据的方法示例
2020/06/19 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
Python jieba结巴分词原理及用法解析
2020/11/05 Python
测试工程师职业规划书
2014/02/06 职场文书
教师节促销方案
2014/03/22 职场文书
医学生就业推荐表自我鉴定
2014/03/26 职场文书
文化活动实施方案
2014/03/28 职场文书
公积金接收函格式
2015/01/30 职场文书
大连导游词
2015/02/12 职场文书
小学校本教研总结
2015/08/13 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
vue+spring boot实现校验码功能
2021/05/27 Vue.js