第1章 Node.js初识 1
1.1 引子 1
1.2 JavaScript 7
1.3 什么是Node.js 9
1.3.1 Node.js概述 9
1.3.2 Node.js的特点 12
1.3.3 Node.js的应用场景 16
1.4 本章小结 18
第2章 Node.js安装与入门 19
2.1 安装Node.js 19
2.1.1 3m安装法 19
2.1.2 nvm 20
2.1.3 npm 26
2.1.4 nrm 32
2.1.5 从源码进行编译 35
2.1.6 状态理论 35
2.2 Hello Node.js! 36
2.2.1 Hello World 36
2.2.2 Hello CommonJS 37
2.2.3 Hello HTTP 38
2.3 编辑器与调试 41
2.3.1 IDE/编辑器 41
2.3.2 VSCode 42
2.3.3 调试 45
2.4 本章小结 52
第3章 更了不起的Node.js 53
3.1 架构升级 53
3.1.1 从LAMP到MEAN 54
3.1.2 前后端分离 55
3.1.3 页面即服务 58
3.1.4 场景决定选型 59
3.2 贯穿开发全过程 60
3.2.1 静态API 60
3.2.2 现代Web开发 63
3.2.3 后端开发 68
3.3 更多乐趣 78
3.3.1 更多应用场景 78
3.3.2 C/C++扩展 79
3.3.3 团队优化 80
3.3.4 全栈之路 81
3.4 本章小结 85
第4章 更好的Node.js 86
4.1 选择 86
4.1.1 语法可难可易 86
4.1.2 开发大型软件 90
4.1.3 特定场景下的快速开发 91
4.2 单线程会“死”吗 92
4.2.1 uncaughtException 93
4.2.2 异常捕获 94
4.2.3 forever 95
4.2.4 小集群:单台服务器上多个实例 95
4.2.5 大集群:多台机器 96
4.3 为Node.js正名 98
4.3.1 版本帝? 98
4.3.2 已无性能优势? 99
4.3.3 异步和回调地狱? 100
4.3.5 技术栈演进 101
4.4 更好的实践 102
4.4.1 ES.next 102
4.4.2 类型系统 110
4.4.3 更好的npm替代品——Yarn 111
4.4.4 多模块管理器Lerna 113
4.5 本章小结 114
第5章 Node.js是如何执行的 115
5.1 准备 115
5.1.1 编辑器 116
5.1.2 编译 117
5.1.3 调试 118
5.2 编译步骤 120
5.2.1 configure 120
5.2.2 make 130
5.2.3 make install 132
5.3 从入口开始 135
5.3.1 核心流程 137
5.3.2 构造process对象 139
5.3.3 LoadEnvironment 147
5.3.4 bootstrap_node.js 148
5.3.5 EventLoop启动方法 160
5.4 API调用过程 162
5.4.1 相关的引用 163
5.4.2 FSReqWrap 163
5.4.3 核心open方法 164
5.4.4 src/node_file.cc 164
5.5 事件循环机制 167
5.5.1 概览 167
5.5.2 生命周期 169
5.5.3 microtask和macrotask 170
5.5.4 process.nextTick(callback) 173
5.6 本章小结 175
第6章 模块与核心 176
6.1 CommonJS规范 176
6.1.1 简介 176
6.1.2 核心技术 181
6.2 Node.js 模块 189
6.2.1 从源码分析实现原理 189
6.2.2 从Node.js代码执行开始 191
6.2.3 深入理解模块 195
6.2.4 全局对象 205
6.2.5 Node.js模块详解 215
6.3 未来展望:ES模块 220
6.3.1 ES模块入门 221
6.3.2 模块导入 222
6.3.3 模块导出 222
6.3.4 ES模块示例 223
6.3.5 兼容性更好的@std/esm 224
6.4 本章小结 224
第7章 异步写法与流程控制 225
7.1 异步调用 226
7.1.1 异步与同步 226
7.1.2 浏览器中的异步 227
7.1.3 Node.js异步原理 227
7.1.4 API和示例 229
7.1.5 代码优化 231
7.2 Node.js自带的异步写法 236
7.2.1 错误优先的回调方式 236
7.2.2 EventEmitter 240
7.2.3 该选择哪种风格的写法 247
7.3 更好的异步流程控制 248
7.3.1 回调地狱 248
7.3.2 Thunk 252
7.3.3 Promise 254
7.3.4 Generator 276
7.3.5 async函数 282
7.4 本章小结 287