原文链接:Debugging Node.js Application Using ndb

Google Chrome 实验室发布了一款新的 node debug 工具来提升开发者体验,本文将会全面介绍 ndb 这款 node 工具

熟悉 node 的人可能知道,node 一直支持一个无头调试工具:

它使用了一个已经被弃用的协议叫做 V8 调试器协议,并且它并不算是一个功能完备的调试器,只有一些简单的检查功能。

过去在这种情况下,一个新的基于 V8 调试器协议和 Blink 的调试工具出现在开发者眼前,它能够允许我们在任何一个 Webkit 内核的浏览器 DevTools 上面调试我们的 node 应用,是的,它就是 node-inspector,它的出现大幅增加了我们调试 node 应用的效率。

在 node 的 V6.3.0 版本中,V8 Inspector 作为一个实验特性被加入到这个版本中,它带来了一个非常强大的调试协议,同时还集成了 Chrome 的 DevTools 并且支持非常多的新特性如Blackbox、profiling、workspaces和sourcemap等等。此外,它并不依赖已经被弃用的 V8 调试器协议,而是直接基于 Chrome 的调试协议,因此它可以直接跑在调试客户端里面,像 Chromium 内核浏览器、VSC ode、WebStorm这些。启动它也非常简单,只需要输入命令 node --inspect scrip.js 即可。

在 7.20 号的时候,一个叫做 ndb 的全新 node 调试工具也同步开源了。

有新的 node 调试工具的确令人振奋,但这个新的 ndb 拥有哪些新特性呢?

ndb 出现的背景

首先附上 ndb 的官方定义:

ndb is an improved debugging experience for Node.js, enabled by Chrome DevTools (ndb 是一次对 node 调试体验的升级,Chrome DevTools 原生支持 ndb)

从上面的定义中,我们可以发现:

  1. ndb 能够提升调试体验
  2. Chrome DevTools 原生支持 ndb,意味着它使用的是 Chrome 的调试协议,类似于 V8 Inspector
  3. ndb是谷歌 Chrome 实验室维护的

因此,你可能认为 ndb 只是提供了一个升级版的 V8 Inspector ,然而事实并非如此。

我们可以发现,使用 V8 Inspector 和 Chrome DevTools 有两个前提:一是 node 版本要大于 6.3.0,另一个是必须要用 Chrome 或者 Chromium 内核的浏览器。如果我们不满足这两个条件或者想在非 Chromium 内核下调试的话怎么办呢?

前面我们没说到 ndb 的使用依赖什么环境,它依赖一个叫做 Puppeteer 的包,Puppeteer 是一个通过 Chrome DevTools 协议来控制 Chromium 的包,它提供了很多封装好的接口。

当 ndb 安装了 Puppeteer 之后,一个最新的与当前环境兼容的 Chromium 也被安装到了依赖包里。

因为是独立安装的,所以 ndb 不依赖操作系统的浏览器,这种对浏览器不依赖的特性也成为了 ndb 的一个优势。

但它同时也带来一个问题,那就是 node_modules 会比较大,毕竟里面有一个 Chromium。

那么 ndb 在调试上的体验如何呢?

探索ndb

第一步我们先用 express 建一个 node 应用 demo:


// app.js
const express = require('express');
const app = express(); app.get('/', (req, res) => res.send('Hello World!')); app.listen(3000, () => console.info('Example app listening on port 3000!')); 复制代码

再在 package.json 定义一个运行脚本:


"scripts": {
"start": "node app.js"
} 复制代码

如何安装

首先我们在全局环境或者本地安装 ndb。


npm install -g ndb 复制代码

启动ndb

我们有好几种方法启动 ndb:

1️⃣ - 直接执行文件

我们可以通过直接用 ndb 命令执行一个文件来开启 ndb,如:


ndb app.js 复制代码

2️⃣ - 运行一个二进制可执行文件

有时候我们想要用 ndb 来调试一些可执行二进制文件启动的服务,如 npm 脚本、webpack、单元测试这些。

只需要执行如下命令:


ndb npm start 复制代码

上面我们用 ndb 运行了一个 npm 脚本,同样的,只要配置妥当我们还可以运行 ndb webpack 或 ndb mocha 等命令

3️⃣ - 运行一个项目

如果我们只是需要打开一个 ndb 服务,可以直接在项目目录里面执行 ndb . 来打开,这个命令允许我们在执行脚本之前设置断点、编辑文件或其他任何东西。

PS:接下来的示例我们都采用第三种启动方法来示范

放置断点

在调试的时候放置断点非常简单

我们可以在模块被实际加载之前就放置断点

处理文件

使用 Chrome DevTools,我们可以在项目中创建和编辑文件,并将它们保存

运行 npm 脚本

如果项目中包含一些 npm 脚本,可以通过 ndb 的面板中运行

![Running an npm script]qpic.url.cn/feeds_pic/a…)

内置终端

通过 ndb 也可以直接访问终端

Blackboxing

在默认情况下,ndb 会屏蔽一些外部文件,如 node 内置库,我们调试的时候对这些外部文件并不需要关心

进程面板

这个面板会列出当前由 ndb 启动的所有 node 进程。此外,子进程会收拢到它的父进程中,方便管理和终止

代码片段

ndb 支持创建一些代码片段来执行和调试

变量访问

当前进程变量和 node 的全局变量,ndb 都可以访问到


《IVWEB 技术周刊》 震撼上线了,关注公众号:IVWEB社区,每周定时推送优质文章。

周刊文章集合: weekly

关注下面的标签,发现更

【译】使用 ndb 调试 node 应用的更多相关文章

  1. 用node-inspector调试Node.js(转自NOANYLOVE'S BLOG)

    原文地址:http://www.noanylove.com/2011/12/node-the-inspector-debugging-node-js/ 用node-inspector调试Node.js ...

  2. 使用webstorm调试node程序

    前言 相信大家接触过不少node代码了,如果你应用的比较初级或者针对你的项目不需要接触过深的node代码,也许你仅仅需要简单的console.log('your variable')就完全满足你的需要 ...

  3. 优雅的使用Chrome调试Node程序

    前言 我不知道大家用什么来调试node程序.可能有的人用node-inspect,但是这货很久没更新了,而且一堆的bug用起来很不爽:可能有的人用命令行来,但是这样操作不够灵活:还有人只用consol ...

  4. vscode 调试node.js

    在开发的过程中,几乎不可能一次性就能写出毫无破绽的程序,断点调试代码是一个普遍的需求. 作为前端开发工程师,以往我们开发的JavaScript程序都运行在浏览器端,利用Chrome提供的开发者工具就可 ...

  5. 使用Chrome DevTools直接调试Node.js与JavaScript(并行)

    Good News: 现在我们可以用浏览器调试node.js了!!! 前提 Node.js 6.3+, 这个可上Node.js官网自行下载: Chrome 55+. 如果您本地的chrome升级到最新 ...

  6. 调试node接口

    从node服务端到浏览器端,调试node脚本,验证接口功能是否正常. 一.温故知新 https://www.cnblogs.com/camille666/p/nodejs_server.html ht ...

  7. 调试 node.js 程序

    调试 node.js 程序 在程序开发中,如何快速的查找定位问题是一项非常重要的基本功.在实际开发过程中,或多或少都会遇到程序出现问题导致无法正常运行的情况,因此,调试代码就变成了一项无法避免的工作. ...

  8. 【译】在 Chrome 开发者工具中调试 node.js

    原文链接 : Debugging Node.js in Chrome DevTools 原文作者 : MATT DESLAURIERS 译文出自 : 掘金翻译计划 译文链接 : https://git ...

  9. nodejs 使用Google浏览器进行可视化调试——Node Inspector工具

    1.npm安装Node Inspector工具,全局安装 命令行执行npm install -g node-inspector 2.启动Node Inspector工具,命令行执行 node-insp ...

随机推荐

  1. 【Django】RROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

    刚刚启动项目的时候,突然报了这个错误.之前一直正常 后来百度一下,让我在window的host文件下,把被注释的127.0.0.1   localhost这个的注释取消 然鹅并木有用 直接用cmd连接 ...

  2. python生成器(generator)、迭代器(iterator)、可迭代对象(iterable)区别

    三者联系 迭代器(iterator)是一个更抽象的概念,任何对象,如果它的类有next方法(next python3)和__iter__方法返回自己本身,即为迭代器 通常生成器是通过调用一个或多个yi ...

  3. 考研结束,重返python

    因为考研的原因,python的学习告一段落,现在考验终于结束了,也抓眼又到了新的一年.新的一年里也要继续加油啊.python学习之路还要继续下去,但是毕竟有将近半年没有鹏编程了,首先我还是需要好好的复 ...

  4. 转:centos查看实时网络带宽占用情况方法

    Linux中查看网卡流量工具有iptraf.iftop以及nethogs等,iftop可以用来监控网卡的实时流量(可以指定网段).反向解析IP.显示端口信息等. centos安装iftop的命令如下: ...

  5. python note 04 list的应用及元组

    1,昨日内容 ascii:字母,数字,特殊字符:1个字节,8位 Unicode:16位 两个字节 升级 32 位 四个字节 utf-8:最少一个字节 8位表示. 英文字母 8位 1个字节 欧洲16位, ...

  6. 386. Lexicographical Numbers 输出1到n之间按lexico排列的数字序列

    [抄题]: Given an integer n, return 1 - n in lexicographical order. For example, given 13, return: [1,1 ...

  7. react项目搭建

    1.下载安装node.js,需要node.js环境. 2.经过挑选,决定选择creat-react-app这个项目脚手架,然后输入指令安装          $ npm install -g crea ...

  8. [leetcode]58. Length of Last Word最后一个词的长度

    Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the l ...

  9. jfinal处理完html提交过来的数据,将处理信息返回给html页面。html根据返回值进行相应的处理

    1.前台jQuery代码: $.ajax({ url: "/admin/jcsjpz/syxmdy/RemoveSyxm", data: {data: id}, success: ...

  10. Linux top命令中CPU信息的详解(转)

    add by zhj: 下面的文章解释的很好了,这里再说明一下top命令中wa的含义,我们知道,当IO阻塞时,操作系统会把进程改为阻塞态,将CPU调度到运行其它进程. CPU在空闲状态下,会检查是否有 ...