Node.js开发简单,性能极好,一经发布便成了明星级项目。随着大前端领域的蓬勃发展,跨平台开发、API构建、Web应用开发等场景愈加常见,Node.js也成为大前端开发的必备神器。本书以Node.js为主,讲解了Node.js的基础知识、开发调试方法、源码原理和应用场景,旨在向读者展示如何通过*的Node.js和npm编写出更具前端特色、更具工程化优势的代码。本书还讲解了Node.js中相当核心且复杂的异步流程控制,展望了未来异步流程的发展方向,非常适合大前端领域及后端领域的测试、运维及软件开发从业者阅读、学习。
序
本书从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为主。
狼叔(网名i5ting),Node.js 技术布道者,Node全栈公众号作者,全栈技术实践者。曾就职于多家知名IT企业,从事前端开发、后端开发、数据分析等工作,目前负责公司内的Node.js开发和基础框架开发工作。