什么是 ndb?
ndb 的 GitHub 仓库主页是这么介绍的:
ndb is an improved debugging experience for Node.js, enabled by Chrome DevTools.
Chrome DevTool 是非常好用的断点调试工具,Node 也提供了类似的调试器。只需要在使用 Node 运行脚本时加入 --inspect 参数即可,VSCode 中的调试就是基于此。但是使用 inspect 调试多线程非常麻烦,以及 inspect 不支持调试一些第三方程序,如 webpack。因而 ndb 诞生了,正如它的自我绍,它是为了提升 Node.js 的调试体验而诞生的。
限制
ndb 本质就是利用 Chrome DevTools 调试 Node.js 代码的工具,因此只能在 Node 运行时下使用(实测是不能使用 deno 来调试的,但是 deno 也是支持 inspect protocol 的,即运行时加上 --inspect 参数,浏览器打开 chrome://inspect 即可)。但你不一定需要安装 Chrome 或者基于 Chromium 内核的浏览器。因为初次运行时 ndb 会安装依赖,其中就包括一个完整的 Chromium !!!🤷♀️。
在我的 Windows 电脑中,ndb 下载的 Chromium 位于如下地址。
我们使者用这个 Chromium 打开掘金主页,完全是 Ok 的。这很难评,好吧。
安装
首先,当然得安装 Node,然后使用自带的 npm 安装,使用 yarn 安装也行,npm 和 yarn 安装命令分别如下:
npm install -g ndb
yarn global add ndb
开始使用
ndb 可以用于调试一个脚本,直接在 ndb 后面加上脚本就行。
ndb main.js
更直观地,也可以加上 node,即如下命令。
ndb node main.js
该命令会自动打开调试面板,剩下的调试体验就和 Chrome DevTool 完全一致了:断点、单步、跳过函数、观察变量等基本功能有。
不仅如此,还可以直接访问 Node 相关全局变量(这在浏览器中是不行的)与当前作用域的变量。
对于如下代码:
const a = 1;
const b = 2;
function add(lhs, rhs) {
return lhs + rhs;
}
const result = add(a, b);
console.log(result);
在进入 add 函数前打印 lhs 会报错,进入 add 函数之后就能打印出参数值。如果直接在 console 中修改 lhs 的值,是会影响到最终的结果的。你可以看到,最终的结果从 3 变成了 102,这是因为我们在 return 语句前将 lhs 的值修改为了 100.
总结
Chrome DevTool 是一款非常优秀成熟的调试工具,ndb 使得在 Node 环境运行的代码也可以获得 Chrome DevTool 一样的调试体验。除了电脑中又多了一个 Chromium 内核,几乎没什么缺点。
调试的工具非常多,例如 VSCode 原生的调试工具或者其他 IDE 自带的调试工具也有不错的调试体验。
调试终究是要找 Bug,找性能瓶颈,好的工具能让调试事半功倍。但更重要的是平时要养成好的编程习惯,先设计后编码,少用“黑魔法”。“小黄鸭”调试法的底层逻辑就是理清代码逻辑后相对更容易发现 Bug,如果自己都不能向“小黄鸭”解释某处代码,这部分代码就可能是存在问题。