书籍作者:狼叔 | ISBN:9787121359071 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:7232 |
创建日期:2021-02-14 | 发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
Node.js开发简单,性能极好,一经发布便成了明星级项目。随着大前端领域的蓬勃发展,跨平台开发、API构建、Web应用开发等场景愈加常见,Node.js也成为大前端开发的必备“神器”。
本书以Node.js为主,讲解了Node.js的基础知识、开发调试方法、源码原理和应用场景,旨在向读者展示如何通过新的Node.js和npm编写出更具前端特色、更具工程化优势的代码。本书还讲解了Node.js中相当核心且复杂的异步流程控制,展望了未来异步流程的发展方向,非常适合大前端领域及后端领域的测试、运维及软件开发从业者阅读、学习。
桑世龙 狼叔(网名i5ting)现为阿里巴巴前端技术专家,前去哪儿网前端架构师,Node.js 技术布道者,Node全栈公众号运营者。目前主要关注技术架构和团队梯队建设方向。即将出版《更了不起的Node.js:将下一代Web框架Koa进行到底》一书。
√ 狼叔千日奋笔,狼书一啸横空:Node.js首席布道师+一手创办垂直公号“Node全栈”+CNode技术社区活跃贡献者,艳压群芳,名动八方。
√ 狼书三卷一出,Node再无遗册:《狼书(卷1):更了不起的Node.js》+《狼书(卷2):Node.js Web应用开发》+《狼书(卷3):Node.js高级技术》,百万宏篇,精华尽现。
√ Node纵横全网,狼书更有良方:横跨前后端的深厚功底+阿里|优酷|去哪儿网高端项目练级+Web|移动|服务端架构担当,远非寻常,超出想象。
√ 狼书新老咸宜,Node进行到底:面向新人的超完整知识体系+面向进阶人群的超实用高级技巧+面向专家人群的超深邃原理剖析,遍布巧思,直指精髓。
序
本书从2015年10月开始写作。
在那之前,我还在天津创业,顶着CTO的头衔干着各种最基础的编码工作。由于公司在天津的位置很偏僻,所以公司招人成了一个大问题。更要命的是,创始人没有工资可拿,现在想想只能说是情怀在支撑我吧。
公司招人不便,那就只能想办法把人才从北上广拉到天津,于是就动了扩大技术影响力的心思——我开始在CNode社区上发帖,后面慢慢尝试做“Node全栈”公众号,效果还不错。我还记得CNode社区管理员、知名Node.js开发者alsotang曾评论过我的一篇文章,说我是Node.js布道者。当时我臭美了很久,之后便自然而然地走上了布道之路。
2015年,我结婚了,财权上交,发觉生活窘迫,又不好意思向老婆要钱,于是便开始在网上教授VSCode,之后我又和极客邦旗下的StuQ合作课程,获得收入的同时又可以进一步扩大技术影响力。而技术影响力扩大的体现就是,我被出版社的编辑发现了。由于早有布道的心思,自然希望能够出一本书,于是便开始了写书之旅。
可是写书从来都不是一件容易的事。阅历浅,写不来;无恒心,写不来。从2015年10月到2019年2月,历时三年多,很多朋友催书,以至于我经常在演讲中“自黑”:“我的书从Node.js v4写到Node.js v8,然而还没有写完。”与出版社约稿时,Node.js才刚刚发布4.0版本,而2019年年初,Node.js已经发布了11.10版本。本书几经修改,最终确定以Node.js的8.0版本为核心版本。虽然后面Node.js更新的版本里又有新功能,但整体来看Node.js的API设计得非常好,几乎都是向后兼容的,所以即使是11.10版本,和8.0版本的差别也不大,而且在本书的编辑过程中我又进行了一定的更新,因此不会影响读者阅读和学习。
在这三年多的时间里,Node.js稳定高效地发布了多个版本,国内外的Node.js使用率也渐渐达到了一个前所未有的高度。感谢前端领域的爆发式增长,这极大扩展了Node.js的应用场景,而且新语法、新特性的使用也开始成为大前端开发团队中的标配。
人生之美好就是在苦难之后能够获得成果。写书的过程是痛苦的,但也让我对于“成全别人,才能成就自己”这句话有了更深刻的认识。最开始写书是为了布道,希望更多人能从中受益,没想到最先受益的是自己,通过长时间的积累,我完善了自己的知识体系,受益匪浅。通过与CNode社区、出版社的编辑以及Node.js爱好者们之间的交流,我有了更好的学习机会。通过写书、演讲、组织社区活动,我有了更丰富的人生经历。
以前见到图书的前言中总有致谢话语,还以为只是出版“套路”。然而今时今日,历经三年多的写作,我确确实实要感谢很多人。
感谢我的家人,写书会牺牲很多陪伴家人的时间,感谢他们的理解和支持。最难过的是周一到周五,只能看老婆通过微信发来的宝宝的视频,一遍一遍地看,一遍一遍地想哭。
感谢所有推荐本书以及为本书进行技术审校的专家们,若没有他们的帮助,这本书恐怕无法以最佳状态与各位读者见面。他们的宝贵建议使得本书的内容不至于空洞,也让我受益良多。
感谢博文视点的张春雨编辑和孙奇俏编辑,他们一次次地叮嘱我、鼓励我,面对面指导我如何规范写作,这种耐心和包容是极其难得的。这本书在审校初期,有6位出版社的编辑都参与其中,那时我是崩溃的——感觉自己数学不好,常常上面说3项下面列4项;语文也不好,连基本的语句都表达不清,很符合那句玩笑话:“你的语文是体育老师教的吧”。我能够想象编辑们在修改书稿之时是多么的“痛苦”,因此再次感谢各位编辑,感谢他们的辛苦付出,因为有他们,本书才能够顺利出版。
回想这三年多的写作过程,其实几次都想放弃,想将Node.js系统地讲明白,真的不是一件容易的事。可是话都说出去了,不想让一直以来支持我的读者失望,更不能自己“打脸”,所以,这本书最终还是跟大家见面了。感谢各位粉丝在各个技术群里“花式”催书,感谢他们对我的鞭策。
再次感谢所有的小伙伴们。
所有未见面的读者,但愿狼叔的“碎碎念”,能够带你们打开Node.js世界的大门,领略大前端领域璀璨的星光。
狼叔
2019年4月于北京
前言
Node.js诞生于2009年,是由Joyent公司的员工Ryan Dahl开发完成的,之后Joyent公司一直扮演着Node.js孵化者的角色。由于诸多原因,Ryan于2012年离开了Node.js社区,随后在2015年,由于Node.js的贡献者们在ES6新特性集成问题上产生意见分歧,因此分裂出io.js。
io.js的分裂最终促成了2015年Node.js基金会的成立,同年Node.js v4.0顺利发布。Node.js基金会的创始成员包括Google、Joyent、IBM、Paypal、Microsoft、Fidelity和Linux基金会,创始成员将共同掌管过去由Joyent一家企业掌控的Node.js开源项目。此后,Node.js基金会发展得非常好,稳定地发布了5.x、6.x、7.x、8.x、9.x、10.x、11.x等多个版本,截止到本书完稿之时,最新版本已经是v11.14,最新的长期支持(LTS)版本是v10.15。
Node.js不是一门语言也不是一个框架,它是基于Chrome V8引擎的JavaScript运行时环境,同时结合libuv扩展了JavaScript功能,使得JavaScript能够支持浏览器DOM操作,同时具有只有后端语言才有的I/O、文件读写于操作数据库等能力,是目前使用最简单的全栈式环境。
本书内容
从整体上来说,本书以Node.js为主,首先介绍了Node.js的发展历史,然后简要概括了Node.js的特点和使用场景,之后讲解了Node.js实现过程中的新增内容(如语法、模块、单进程等)的基本用法。读者入门Node.js之后,可以继续从本书中了解Node.js的执行原理,深入解读源码。最后,本书还讲解了Node.js中非常核心且复杂的异步流程控制,对未来异步流程的发展方向进行了展望。
本书共分7章,每章的内容简介如下。
第1章 Node.js初识
本章介绍了Node.js的一些基础知识,包括什么是Node.js、Node.js和JavaScript的关系、Node.js的特点和应用场景等。
第2章 Node.js安装与入门
本章介绍了Node.js安装与使用的基本方法,包括3m(即nvm、nrm、npm)安装法、Node.js基础示例,以及编辑器和调试等内容。
第3章 更了不起的Node.js
本章更加详细地介绍了Node.js的各类应用场景,对Node.js的核心作用进行了概括与总结,还对如何成为全栈工程师提供了宝贵建议。
第4章 更好的Node.js
本章介绍了Node.js的各种写法,包括单线程与集群,以及各种优秀实践,包括ES语法、多模块管理器Lerna、npm的替代品Yarn等。
第5章 Node.js是如何执行的
本章介绍了Node.js的源码构建和调试过程,阐述了Node.js是如何执行的,还介绍了API的调用过程,以及事件循环机制。
第6章 模块与核心
本章介绍了Node.js中的CommonJS规范、SDK模块与核心技术,还对未来的ES6模块功能进行了预测与展望。
第7章 异步写法与流程控制
本章介绍了异步流程控制的演进过程、Node.js的核心异步写法,以及更好的异步流程控制机制,如Thunk、Promise、async函数等。
本书中的各章在内容上基本是相互独立的,因此各位读者可以挑选自己感兴趣的章节阅读。这本书是“狼书”系列的第1卷,还有第2卷和第3卷稍后会和各位读者见面,内容涉及Web应用和性能优化等,搭配阅读,效果更好。
目标读者
本书的目标读者有以下三类。
? 正在学习JavaScript开发,对JavaScript语言有基本的了解和熟悉度,且希望能够了解JavaScript发展情况的人。
? 正从事JavaScript开发相关工作,熟悉JavaScript的基本开发要领,在日常工作中经常接触Node.js,想要深入了解Web应用、BFF、API代理等内容,以进一步提升自我的Web工程师(此处不区分前端与后端)。
? 具有极客精神,想要深入研究JavaScript语言及Node.js的全栈工程师。
同时,本书也适合正使用其他编程语言(如Go、PHP、Python、Ruby、Java等)进行Web开发的工程师阅读、学习。
阅读准备
要想运行本书中的示例,需要安装以下系统及软件。
操作系统:推荐Linux,以及macOS X 10.9或以上版本,使用Windows操作系统可能会报错。
浏览器:Google Chrome、Safari、Firefox、Internet Explorer 11、Windows Edge。
运行环境:以Node.js 8.6为主。
第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