详解如何在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 相关文章推荐
jQuery插件animateSlide制作多点滑动幻灯片
Jun 11 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
Jul 29 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
Jan 17 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
Jun 07 Javascript
AngularJS 模块详解及简单实例
Jul 28 Javascript
最原始的jQuery注册验证方式
Oct 11 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
Jan 11 Javascript
利用node实现一个批量重命名文件的函数
Dec 21 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
Sep 29 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
May 10 Javascript
使用微信SDK自定义分享的方法
Jul 03 Javascript
基于Element封装一个表格组件tableList的使用方法
Jun 29 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&MYSQL服务器配置说明
2006/10/09 PHP
PHP高级OOP技术演示
2009/08/27 PHP
php数组函数序列之array_search()- 按元素值返回键名
2011/11/04 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
php生成短域名函数
2015/03/23 PHP
ThinkPHP5框架实现简单的批量查询功能示例
2018/06/07 PHP
js 提交和设置表单的值
2008/12/19 Javascript
javascript removeChild 使用注意事项
2009/04/11 Javascript
Prototype Function对象 学习
2009/07/12 Javascript
javascript 匿名函数的理解(透彻版)
2010/01/28 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
2014/07/06 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
js图片轮播效果实现代码
2020/04/18 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
自带气泡提示的vue校验插件(vue-verify-pop)
2017/04/07 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
Python用imghdr模块识别图片格式实例解析
2018/01/11 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
python 字典的打印实现
2019/09/26 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
Alexandre Birman美国官网:亚历山大·伯曼
2019/10/30 全球购物
YSL圣罗兰美妆俄罗斯官网:Yves Saint Lauret RU
2020/09/23 全球购物
如何利用cmp命令比较文件
2016/04/11 面试题
《我为你骄傲》教学反思
2014/02/20 职场文书
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
怀念母亲教学反思
2014/04/28 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
党支部班子“四风”问题自我剖析材料
2014/09/28 职场文书
医院护士工作检讨书
2014/10/26 职场文书