Node.js:来一打 C++ 扩展

死月电子工业出版社2018年

评分 4.0
字数
320字
章节数
40
ISBN
9787121336423

标签

计算机 编程设计 原生模块开发者程序设计实战案例实用指南

内容简介

《Node.js:来一打 C++ 扩展》是 2018 年 6 月由电子工业出版社出版的 Node.js 底层与原生模块开发专著,作者死月(本名朱凯迪)是国内早期 Node.js 开发者、Node.js 核心贡献者(Collaborator)之一。全书不讲 Node.js 的语法入门,而是以「如何用 C++ 为 Node.js 编写原生扩展」为主线,系统拆解其背后的运行时机制。 书中从 CommonJS 的模块规范、包规范以及 Node.js 的依赖结构讲起,先说明一个 C++ 模块在 require 时如何被加载与实例化;随后用基础篇章介绍 Chrome V8 的核心概念——Isolate、Context、本地与持久句柄、句柄作用域、函数模板与对象模板、访问器与拦截器、常用数据类型与异常机制;再以 binding.gyp 与 node-gyp 为工具,带读者实现第一个 Hello World 式扩展,并推进到 C++ 对象与 JavaScript 类的封装。进阶部分讲解 Node.js 原生抽象层 NAN 的常用宏与帮助类、NAN 中的异步机制,以及 libuv 的事件循环、线程与同步原语、跨线程通信;最后通过文件监视器、Bling Hashes、Auto Object 等实战项目加深理解,并介绍新一代扩展开发方式 N-API。 全书约 320 千字、480 页,适合已具备 Node.js 与 C++ 基础、希望突破性能瓶颈或探究运行原理的开发者阅读。

编辑推荐

市面上讲 Node.js 的书,多数停在 API 与框架层面:会写路由、会用中间件,却说不清一次 require 背后发生了什么。这本书恰好补上那段空白——它不打 Node.js 入门牌,而是直奔「原生扩展」这一少数派路径,把 V8、libuv、gyp 这三块平时只被当作黑盒的组件拆开给你看。 它的价值在于「一本顶三本」。作者从模块加载原理说到 V8 的 Isolate、句柄与作用域,再顺着 libuv 的事件循环、线程与同步原语讲到跨线程通信;读完之后,你不仅会写 C++ 扩展,也会明白 Node.js 自身的模块是怎样被搭起来的。第二层价值是工程可落地:node-gyp 配置、binding.gyp 字段、NAN 的宏与异步工作器、N-API 的迁移写法,都配了可运行的示例,最后还有文件监视器、Bling Hashes、Auto Object 三个完整剖析,能一路跟着敲下来。 需要提醒的是,书中大量细节(比如 NAN 与 N-API 的 API 形态、构建工具链版本)随 Node.js 版本更迭会有出入,阅读时最好对照官方文档核实。但正因它讲的是原理而非某个版本的用法,这份「过时」并不妨碍理解。作者本人是 Node.js 核心贡献者,行文里对源码的熟稔与对踩坑点的提醒,是二手转述写不出来的。

适合谁读

适合

不适合

阅读建议

  1. 阅读前先在本机装好 Node.js 与 C++ 编译工具链(Linux/macOS 用 GCC/Clang,Windows 用 MSVC),边读边敲示例,node-gyp 的坑光看是记不住的。
  2. 第 3 章 V8 是全书最难啃的部分,可先速读建立「句柄—作用域」的整体印象,等第 4 章动手写扩展后再回头精读。
  3. 读到 NAN 与 N-API 章节时,对照 Node.js 官方文档与对应版本的 node-addon-api 说明核实 API 形态,避免被旧版本写法带偏。
  4. 把第 7、8 章的三个实战项目当作检验,独立完成一遍再与书中代码对照,效果远好于只读不练。

出版社简介

电子工业出版社 中国 · 成立于 1982 年

电子工业出版社是一家以电子信息及相关领域为出版特色的综合性出版社。从库内三千余种图书来看,其出版方向覆盖编程设计、人工智能、计算机综合、财经、摄影与社科等门类,既关注技术前沿,也兼顾大众阅读。代表图书包括《因子投资:方法与实践》《x86汇编语言:从实模式到保护模式》《RISC-V开放架构设计之道》《人工智能:语音识别理解与实践》《相控阵雷达技术》《雷达目标特性》及《100个Go语言典型错误》等,多围绕技术方法与工程实践展开。作者资源方面,有石川、李忠、王晓波、大卫·帕特森、安德鲁·沃特曼、余子濠等中外作者。受公开资料所限,暂不展开更多出版特色。

目录

  1. 1 Node.js 的 C++ 扩展前驱知识储备
  2. 1.1 Node.js 的模块机制(CommonJS 模块规范、Node.js 的模块)
  3. 1.2 Node.js 的包机制(CommonJS 包规范、NPM 与 CNPM)
  4. 1.3 Node.js 依赖简介(Chrome V8、libuv 及其他依赖)
  5. 1.4 C++ 扩展开发的准备工作(编辑器 / IDE、node-gyp、其他构建工具)
  6. 2 C++ 模块原理简析
  7. 2.1 为什么要写 C++ 模块(C++ 比 JavaScript 解释器高效、已有的 C++ 轮子)
  8. 2.2 什么是 C++ 扩展(C++ 模块本质、Node.js 模块加载原理)
  9. 3 Chrome V8 基础
  10. 3.1 Node.js 与 Chrome V8
  11. 3.2 基本概念(内存机制、隔离实例 Isolate、上下文 Context、脚本 Script)
  12. 3.3 句柄(本地句柄、持久句柄、永生句柄、待实本地句柄)
  13. 3.4 句柄作用域(一般句柄作用域、可逃句柄作用域)
  14. 3.5 上下文 Context
  15. 3.6 模板(函数模板、对象模板、访问器与拦截器、内置字段、继承)
  16. 3.7 常用数据类型(基值、字符串、数值、布尔、对象、函数、数组、JSON 解析器、回调信息、返回值、Isolate)
  17. 3.8 异常机制(try-catch、抛出异常、异常生成类)
  18. 4 C++ 扩展实战初探
  19. 4.1 binding.gyp(基础结构、GYP 文件、常用字段)
  20. 4.2 牛刀小试(Hello World、函数参数、回调函数、函数返回)
  21. 4.3 循序渐进(C++ 与 JavaScript 类封装、实例化、对象传递、进程退出钩子)
  22. 5 Node.js 原生抽象——NAN
  23. 5.1 Node.js 原生模块开发方式的变迁
  24. 5.2 基础开发(什么是 NAN、安装和配置、基础帮助函数和宏)
  25. 5.3 JavaScript 函数(函数参数类型、函数声明、函数设置)
  26. 5.4 常用帮助类与函数(句柄相关、创建与操作数据对象、封装一个类、异常处理)
  27. 5.5 NAN 中的异步机制(Nan::AsyncQueueWorker、Nan::Callback、Nan::AsyncWorker、Nan::AsyncProgressWorker)
  28. 6 异步之旅——libuv
  29. 6.1 基础概念(事件循环、句柄与请求、尝尝甜头)
  30. 6.2 libuv 的跨线程编程基础(线程、同步原语、工作队列)
  31. 6.3 跨线程通信(uv_async_t 句柄、Watchdog 半成品实战解析与试运行)
  32. 7 实战——文件监视器
  33. 7.1 准备工作(功能规划、文件系统监听库 efsw)
  34. 7.2 核心设计(API 设计、EFSWCore 的结构与核心逻辑)
  35. 7.3 编写 JavaScript 类(类的设计、核心逻辑、简单容错)
  36. 7.4 进一步完善(C++ 代码与 JavaScript 代码的完善)
  37. 8 实战——现有包剖析
  38. 8.1 字符串哈希模块——Bling Hashes(文件设定、C++ 源码剖析、JavaScript 源码剖析)
  39. 8.2 类 Proxy 包——Auto Object(Proxy、使用范例、代码剖析)
  40. 9 N-API——下一代 Node.js C++ 扩展开发方式

常见问题

这本书适合 Node.js 新手入门吗? 不适合。书中明确说明不包含 Node.js 的基础入门知识(如语法等),默认读者已具备初步的 Node.js 与 C++ 基础。完全零基础建议先补一本 Node.js 入门书和 C++ 基础,再来读这本。
书中的技术内容会不会已经过时? 本书 2018 年出版,NAN、node-gyp、N-API 等具体 API 细节随 Node.js 版本演进已有变化。但书中对模块加载机制、V8 句柄与作用域、libuv 事件循环等原理的讲解依然成立,建议实操时对照官方最新文档。
读这本书需要什么前置知识? 需要有 JavaScript 与 Node.js 的实际使用经验(至少写过模块、用过 npm),能读懂 C++ 的类、指针与模板基本写法。同时最好了解命令行构建流程,否则 node-gyp 部分会比较吃力。
「来一打」是什么意思,书名有何含义? 这是作者一种轻松口语化的表达,可理解为「给我来一大把 C++ 扩展」,即大量、成批地写 C++ 原生扩展。全书主旨就是教你以工程化方式编写和使用 Node.js 的 C++ 原生模块。
这本书讲了哪些实战项目? 根据目录,书中包含三类实战:第 7 章基于 efsw 的文件监视器,第 8 章剖析 Bling Hashes 字符串哈希模块与类似 Proxy 的 Auto Object 包,第 9 章用 N-API 实现 Echo 函数并进行类的封装。

本站为索引目录:「全网查询」由您发起、在您的浏览器中运行,所列入口均指向第三方站点,请自行判断可用性。

作者简介

死月 作者

死月是一位公开资料有限的编程类图书作者,目前库内仅收录其作品一种,即《Node.js:来一打 C++ 扩展》。从书名与常见分类“编程设计”来看,该书聚焦 Node.js 与 C++ 扩展开发的结合,属于面向开发者的技术实践类读物。作者围绕这一主题展开写作,内容指向底层实现与工程应用,而非泛泛的入门介绍,因而在选题上具有一定针对性。由于生卒年、国籍与英文名等信息均未明确,其个人经历与创作背景尚无从考证,读者只能通过这一部作品了解其技术关注点。整体而言,死月的写作风格偏向务实、具体,适合已具备一定基础、希望深入理解 Node.js 扩展机制的读者参考。