原文链接: 使用 NDB 调试 Node.js 应用
Google Chrome 实验室最近发布了一款名为 NDB 的新型 Node.js 调试工具,显著提升了开发者的调试体验。本文将详细介绍 NDB 的特性和使用方法。
对于熟悉 Node.js 的开发者来说,Node.js 自带的调试工具可能已经不够用了,因为它基于已废弃的 V8 调试器协议,功能相对有限。随着技术的发展,社区推出了多种增强型调试工具,如 node-inspector,它允许开发者在基于 WebKit 内核的浏览器 DevTools 中调试 Node.js 应用,极大提高了调试效率。
自 Node.js v6.3.0 版本起,V8 Inspector 作为实验性功能加入,带来了与 Chrome DevTools 的深度集成,支持诸如 Blackbox、性能分析、工作区和源映射等高级功能。这使得开发者能够在 Chromium 内核浏览器、VS Code、WebStorm 等环境中轻松调试 Node.js 应用。
2017年7月20日,NDB 作为一款全新的 Node.js 调试工具正式开源,引起了广泛关注。
NDB 的诞生背景
NDB 的官方定义指出:
NDB 通过 Chrome DevTools 提供了改进的 Node.js 调试体验,无需依赖特定版本的 Node.js 或特定浏览器。
这意味着:
- NDB 专注于改善调试体验;
- 它利用了 Chrome DevTools 的强大功能;
- 由 Google Chrome 实验室维护和支持。
虽然 NDB 似乎是对 V8 Inspector 的升级,但实际上它提供了更多灵活性。例如,使用 V8 Inspector 和 Chrome DevTools 需要 Node.js 版本高于 6.3.0,并且必须使用 Chrome 或 Chromium 内核的浏览器。而 NDB 通过集成 Puppeteer(一个用于控制 Chromium 的 Node.js 库)解决了这些问题,使得 NDB 可以在任何环境中运行,无需考虑操作系统自带的浏览器版本。
不过,这种独立性也导致了 node_modules 文件夹的增大,因为其中包含了整个 Chromium 浏览器。尽管如此,NDB 的易用性和跨平台能力仍然使其成为开发者的首选工具。
NDB 的基本使用
为了更好地理解 NDB,我们可以通过一个简单的 Express 应用来演示其基本功能。
// app.js
const express = require('express');
const app = express();
app.get('/', (req, res) => res.send('Hello World!'));
app.listen(3000, () => console.log('App running on port 3000!'));
接着,在 package.json 中添加一个启动脚本:
{
"scripts": {
"start": "node app.js"
}
}
安装 NDB
可以通过 npm 全局或局部安装 NDB:
启动 NDB
NDB 提供了多种启动方式:
1. 直接执行文件
使用 NDB 命令直接运行文件,例如:
2. 运行二进制可执行文件
可以使用 NDB 调试由二进制文件启动的服务,如 npm 脚本、Webpack 构建等:
同样地,也可以运行其他命令,如 ndb webpack
或 ndb mocha
。
3. 启动项目
若只需启动 NDB 服务,可在项目根目录下运行 ndb .
,这样可以在脚本执行前设置断点、编辑文件等。
以下示例均采用第三种启动方式。
设置断点
在 NDB 中设置断点非常直观,可以在代码加载前预先设定。
文件处理
利用 Chrome DevTools,用户可以在项目中创建、编辑并保存文件。
运行 npm 脚本
项目中的 npm 脚本可以直接通过 NDB 的界面运行。
内置终端
NDB 提供了直接访问终端的功能,便于执行各种命令。
Blackboxing
NDB 默认会忽略某些外部文件,如 Node.js 内置库,帮助开发者集中注意力于核心代码。
进程管理
NDB 的进程面板列出了所有由 NDB 启动的 Node.js 进程,并能方便地管理子进程。
代码片段
NDB 支持创建和执行代码片段,方便快速测试代码逻辑。
变量访问
NDB 可以访问当前进程变量及 Node.js 的全局变量,为调试提供了便利。