? ? ? ?廣義的Web全棧眶熬,一般包含后端開發(fā)、前端開發(fā)块请、界面設計娜氏、產品設計、數據庫墩新、各種移動客戶端開發(fā)等等贸弥,狹義的Web全棧則至少包含后端開發(fā)、前端開發(fā)海渊、數據庫绵疲。全棧的難度在于要求你掌握前后端的多種技能、可能要學會多種語言臣疑,比如大家都很典型的全棧概念LAMP(Linux+Apache+Mysql/MariaDB+PHP/Python/Perl)盔憨,前端要用Javascript自不必說,后端或用PHP讯沈、或用Python/Perl郁岩,數據庫你還得會SQL,要想一個人掌握這么多技術和語言缺狠,還是頗有些難度的问慎,即使掌握了,在實際開發(fā)中挤茄,你的腦袋還要在各種不同語言之間來回切換如叼,既增加了腦力負擔,有提升了出錯機率穷劈,實在是一件讓人郁悶?? 的事情笼恰。
? ? ? 不過繼Node.JS和MongoDB誕生之后片酝,一個新的全棧概念MEAN誕生了,從此世界發(fā)生了不小的變化挖腰。所謂MEAN是一個強大的JavaScript全棧解決方案雕沿,它由四大組件組成:數據庫MongoDB、Web服務器框架Express猴仑、Web客戶端框架Angular审轮,以及服務器平臺Node.js。這些組件由不同的團隊開發(fā)辽俗,由開發(fā)人員和倡導者組成的社區(qū)推動各個模塊的開發(fā)疾渣,并為其創(chuàng)建相關文檔。如果你是一名Javascript程序員崖飘,那么對于“Javascript全棧開發(fā)”這個概念想必不會太陌生榴捡,即便沒有親自嘗試過,也應該有所耳聞朱浴。圖靈出版的《MEAN Web開發(fā)》吊圾、《MEAN實踐》《Node與Express開發(fā)》、《JavaScript快速全棧開發(fā)》都介紹了Javascript全棧開發(fā)的理念翰蠢。MEAN的主要優(yōu)勢在于其以JavaScript為主要的編程語言项乒。用一門語言就搞定前后端、數據庫梁沧,光想想就是一件令人興奮的事情?? 檀何!?
? ? ? 當然,學習正統(tǒng)的MEAN開發(fā)廷支,你還是要分別去學習MongoDB频鉴、Express、Angular和Node.JS的恋拍,有沒有更加簡單(偷懶)的方式呢垛孔,想什么呢 ??? ! 答案是:還真的有 —— 那就是 Meteor ?? (Web界的流星),按照《Meteor實戰(zhàn)》的說法芝囤,Meteor仍然是基于MEAN棧的似炎,或者說是屬于泛MEAN陣營的(即泛指那些運行于Node.js之上并使用NoSQL數據庫的任何框架辛萍。MEAN棧架構圖見圖2)悯姊。只是Meteor建構了一個捆綁的更為緊密的生態(tài)系統(tǒng),而不僅僅是服務器進程和庫(框架)的組合贩毕。
簡單地說悯许,Meteor是完全使用JavaScript創(chuàng)建富Web應用程序的開源平臺。它在同一個框架下捆綁并提供所有必需的組件辉阶。它由以下幾部分組成:Node.js先壕、MongoDB瘩扼、實際的應用程序代碼,以及一個強大的CLI工具垃僚。
? ? ? 如果使用Meteor集绰,你可以馬上從零開始(當然,必要的Javascript基礎還是要有的谆棺,具體請參閱本書第一章)創(chuàng)建Web應用程序栽燕,如果你閱讀了本書第二章,你就會發(fā)現建立一個包括響應式用戶界面改淑、用戶賬戶管理碍岔、和一個進行透明性響應式編程的Web程序可以做到如何之快!只要照著例子使用Meteor的CLI(命令行工具)朵夏,你甚至無需知道怎樣安裝或配置任何服務器軟件(Meteor已經幫你搞定了所有基礎設施方面的工作)蔼啦。比如在傳統(tǒng)的MEAN棧里,用戶認證和登錄這部分工作仰猖,你是得在前端用Angular寫捏肢,服務端用Express + Node.JS 來寫,最后用戶數據在MongoDB上的存取你也得寫饥侵,而Meteor把這些繁瑣工作已經打包好了猛计,你要做的就是敲敲它的命令行。有國外程序員做一圖(見圖3)比較正統(tǒng)MEAN棧與Meteor(Comparing Meteor.js and the MEAN stack)爆捞,猶如裝滿零件的購物車?? 與超跑 ??? 的區(qū)別奉瘤,還是頗為形象的。
本書的第二部分(3-10章)進一步通過實戰(zhàn)性的例子詳細介紹了Meteor的主要組成部分(見圖4)煮甥。
? ? ? ?第3章介紹的是Meteor自有的Blaze庫盗温,是Meteor以前默認的前端庫,需要指出的是成肘,Meteor并沒有把前端UI綁死在自己的Blaze庫上卖局,實際上,在官網上就有Meteor用三種不同前端庫(Blaze双霍、Angular.JS砚偶、React)做Todo List的教程。另外洒闸,還有一個需要透露的秘密就是染坯,在最新的Meteor官方指南當中,Blaze只是一筆帶過丘逸、Angular的介紹還停留在1.x階段单鹿、而著墨最多的則是React,鑒于最近兩年React的火爆深纲,各中緣由恐怕不言自明仲锄。
? ? ? ? 一個完整的Web應用毫無疑問要涉及數據的增劲妙、刪、查儒喊、改(CRUD)镣奋,第四章介紹的就是Meteor如何進行CRUD,由于Meteor的數據庫使用的是MongoDB怀愧,所以其數據建模的思想還是與傳統(tǒng)的SQL數據庫有很大區(qū)別的唆途,如果要做復雜一些的應用,就需要深入了解一些MongoDB的知識掸驱,具體可以參見《MongoDB權威指南》肛搬、《MongoDB實戰(zhàn)》、《深入學習MongoDB》等書毕贼。
? ? ? ? 第5章介紹了Meteor的重頭之一——響應式編程温赔,利用Meteor數據庫無處不在的原則,并使用只存在于客戶端的本地集合鬼癣。這樣做的好處在于陶贼,你對數據/表單的更改變化在界面上直接反應出來,不用等到數據提交到后臺再被取回前端再渲染待秃,實際上就消除了等待數據往返后端的時間拜秧,在用戶體驗上自然能得到更好的效果。
? ? ? ? 生產環(huán)境中的Web應用肯定離不開用戶注冊和登錄章郁,以及認證(authentication)和授權(authorization)枉氮,并且要更細粒度的方式來定義用戶權限,這些工作如果是自己開發(fā)暖庄,那都是很繁瑣的事情聊替,而且安全性 ?? 還是個問題。而Meteor已經幫你把這件事給做好了培廓,你幾乎不需要再寫任何代碼惹悄。當然,你也可以不自建用戶名和密碼系統(tǒng)肩钠。使用常見的社交賬戶登錄到你的應用可以降低注冊的門檻泣港,這種方式我們稱為OAuth(Open Authorization),Meteor集成了諸如微博价匠、臉書当纱、GitHub、推特霞怀、谷歌等賬號登錄的API惫东,你只要敲下“meteor add accounts-facebook”這樣類型的指令就夠了莉给。
? ? ? 結合用戶認證和授權毙石,Meteor就可以輕松的根據用戶權限和系統(tǒng)配置來實現用戶數據的發(fā)布和訂閱廉沮,比如通過文檔字段(比如用戶/所有者ID)來安全地限制所發(fā)布的數據,或者確毙炀兀客戶端提供的所有數據在使用前都進行了驗證滞时。
? ? ? 第8章介紹的是Meteor的路由、第9章是Meteor的包管理滤灯,這些內容在各種前端框架中都比較常見坪稽,所以不再贅述。
? ? ? 關于Meteor的下載鳞骤、開發(fā)和部署窒百,個人建議可以使用docker來幫助我們,有一個很好用的開源工具meteor-up豫尽,使用 docker 來運行 Meteor 和 MongoDB篙梢,并且可以方便的把本地 Meteor 部署到云服務上。只要你有一些docker的基礎美旧,借助meteor-up來實現不是一件難事渤滞。
? ? ? ?總結,Meteor的主要優(yōu)點如下:
1榴嗅、容易學習妄呕,與正統(tǒng)MEAN棧相比,新開發(fā)人員不必對松耦合的前端庫和后端框架進行深入地研究嗽测,就可以實現一些應用绪励。對JavaScript有些基本的了解就足夠開始。
2唠粥、大部分應用可以在客戶端上運行优炬,好處是:服務器的負載會較小,用戶界面的響應很快厅贪,用戶體驗比較好蠢护。
3、代碼可重用养涮,由于Meteor的同構(Javascript)性質葵硕,同樣的代碼可以在瀏覽器中、服務器上甚至是移動設備上運行贯吓。
4懈凹、強大的命令行工具,Meteor提供了開箱即用軟件包管理和構建管理工具悄谐,覆蓋了整個構建過程介评,從收集和編譯源文件到文件精簡、源映射、解決依賴關系等等们陆,讓你把心思用在業(yè)務邏輯上寒瓦。
? ? ? 如果你需要一個快速的應用原型開發(fā)工具 ?? ,那么Meteor一定是一個優(yōu)秀的選擇 ?? 坪仇。