科技>计算机>网络与互联网
狼书(卷1):更了不起的Node.js

狼书(卷1):更了不起的Node.js"

作者:狼叔
ISBN:9787121359071
定价:¥79.0
字数:435千字
页数:312
出版时间:2019-07
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

Node.js开发简单,性能极好,一经发布便成了明星级项目。随着大前端领域的蓬勃发展,跨平台开发、API构建、Web应用开发等场景愈加常见,Node.js也成为大前端开发的必备“神器”。本书以Node.js为主,讲解了Node.js的基础知识、开发调试方法、源码原理和应用场景,旨在向读者展示如何通过最新的Node.js和npm编写出更具前端特色、更具工程化优势的代码。本书还讲解了Node.js中相当核心且复杂的异步流程控制,展望了未来异步流程的发展方向,非常适合大前端领域及后端领域的测试、运维及软件开发从业者阅读、学习。

前言

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

目录

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

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个