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開發和基礎框架開發工作。