热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用NDB提升Node.js应用调试体验

本文介绍了由GoogleChrome实验室推出的新一代Node.js调试工具NDB,旨在为开发者提供更加高效和便捷的调试解决方案。
原文链接: 使用 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 或特定浏览器。

这意味着:

  1. NDB 专注于改善调试体验;
  2. 它利用了 Chrome DevTools 的强大功能;
  3. 由 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:

npm install -g ndb

启动 NDB

NDB 提供了多种启动方式:

1. 直接执行文件

使用 NDB 命令直接运行文件,例如:

ndb app.js

2. 运行二进制可执行文件

可以使用 NDB 调试由二进制文件启动的服务,如 npm 脚本、Webpack 构建等:

ndb npm start

同样地,也可以运行其他命令,如 ndb webpackndb mocha

3. 启动项目

若只需启动 NDB 服务,可在项目根目录下运行 ndb .,这样可以在脚本执行前设置断点、编辑文件等。

以下示例均采用第三种启动方式。

设置断点

在 NDB 中设置断点非常直观,可以在代码加载前预先设定。

文件处理

利用 Chrome DevTools,用户可以在项目中创建、编辑并保存文件。

运行 npm 脚本

项目中的 npm 脚本可以直接通过 NDB 的界面运行。

内置终端

NDB 提供了直接访问终端的功能,便于执行各种命令。

Blackboxing

NDB 默认会忽略某些外部文件,如 Node.js 内置库,帮助开发者集中注意力于核心代码。

进程管理

NDB 的进程面板列出了所有由 NDB 启动的 Node.js 进程,并能方便地管理子进程。

代码片段

NDB 支持创建和执行代码片段,方便快速测试代码逻辑。

变量访问

NDB 可以访问当前进程变量及 Node.js 的全局变量,为调试提供了便利。


推荐阅读
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 程序员妻子吐槽:丈夫北漂8年终薪3万,存款情况令人意外
    一位程序员的妻子在网上分享了她丈夫在北京工作八年的经历,月薪仅3万元,存款情况却出乎意料。本文探讨了高学历人才在大城市的职场现状及生活压力。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文探讨了《魔兽世界》中红蓝两方阵营在备战阶段的策略与实现方法,通过代码展示了双方如何根据资源和兵种特性进行战士生产。 ... [详细]
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
  • 本文探讨了在通过 API 端点调用时,使用猫鼬(Mongoose)的 findOne 方法总是返回 null 的问题,并提供了详细的解决方案和建议。 ... [详细]
author-avatar
当个谎言家很不错非
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有