流星撞擊全棧之《Meteor實戰》

阿狸不歌發表於2017-07-16

Meteor實戰 封面 廣義的Web全棧,一般包含後端開發、前端開發、介面設計、產品設計、資料庫、各種移動客戶端開發等等,狹義的Web全棧則至少包含後端開發、前端開發、資料庫。全棧的難度在於要求你掌握前後端的多種技能、可能要學會多種語言,比如大家都很熟悉的典型全棧概念LAMP(Linux+Apache+Mysql/MariaDB+PHP/Python/Perl),前端要用Javascript自不必說,後端或用PHP、或用Python/Perl,資料庫你還得會SQL,要想一個人掌握這麼多技術和語言,還是頗有些難度的,即使掌握了,在實際開發中,你的腦袋還要在各種不同語言之間來回切換,既增加了腦力負擔,又提升了出錯機率,實在是一件讓人鬱悶? 的事情。

不過繼Node.JS和MongoDB誕生之後,一個新的全棧概念MEAN誕生了,從此世界發生了不小的變化。所謂MEAN是一個強大的JavaScript全棧解決方案,它由四大元件組成:資料庫MongoDB、Web伺服器框架Express、Web客戶端框架Angular,以及伺服器平臺Node.js。這些元件由不同的團隊開發,由開發人員和倡導者組成的社群推動各個模組的開發,併為其建立相關文件。如果你是一名Javascript程式設計師,那麼對於“Javascript全棧開發”這個概念想必不會太陌生,即便沒有親自嘗試過,也應該有所耳聞。圖靈出版的《MEAN Web開發》、《MEAN實踐》《Node與Express開發》、《JavaScript快速全棧開發》都介紹了Javascript全棧開發的理念。MEAN的主要優勢在於其以JavaScript為主要的程式語言。用一門語言就搞定前後端、資料庫,光想想就是一件令人興奮的事情? !


當然,學習正統的MEAN開發,你還是要分別去學習MongoDB、Express、Angular和Node.JS的,有沒有更加簡單(偷懶)的方式呢,想什麼呢 ? ! 答案是:還真的有 —— 那就是 Meteor ? (Web界的流星),按照《Meteor實戰》的說法,Meteor仍然是基於MEAN棧的,或者說是屬於泛MEAN陣營的(即泛指那些執行於Node.js之上並使用NoSQL資料庫的任何框架。MEAN棧架構圖見圖2)。只是Meteor建構了一個捆綁的更為緊密的生態系統,而不僅僅是伺服器程式和庫(框架)的組合。

簡單地說,Meteor是完全使用JavaScript建立富Web應用程式的開源平臺。它在同一個框架下捆綁並提供所有必需的元件。它由以下幾部分組成:Node.js、MongoDB、實際的應用程式程式碼,以及一個強大的CLI工具。

圖2 MEAN棧架構圖

如果使用Meteor,你可以馬上從零開始(當然,必要的Javascript基礎還是要有的,具體請參閱本書第一章)建立Web應用程式,如果你閱讀了本書第二章,你就會發現建立一個包括響應式使用者介面、使用者賬戶管理、和一個進行透明性響應式程式設計的Web程式可以做到如何之快!只要照著例子使用Meteor的CLI(命令列工具),你甚至無需知道怎樣安裝或配置任何伺服器軟體(Meteor已經幫你搞定了所有基礎設施方面的工作)。比如在傳統的MEAN棧裡,使用者認證和登入這部分工作,你是得在前端用Angular寫,服務端用Express + Node.JS 來寫,最後使用者資料在MongoDB上的存取你也得寫,而Meteor把這些繁瑣工作已經打包好了,你要做的就是敲敲它的命令列。有國外程式設計師做一圖(見圖3)比較正統MEAN棧與Meteor(Comparing Meteor.js and the MEAN stack),猶如裝滿零件的購物車? 與超跑 ? 的區別,還是頗為形象的。 Meteor超跑


本書的第二部分(3-10章)進一步通過實戰性的例子詳細介紹了Meteor的主要組成部分(見圖4)。 Meteor主要構成圖 第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,所以其資料建模的思想還是與傳統的SQL資料庫有很大區別的,如果要做複雜一些的應用,就需要深入瞭解一些MongoDB的知識,具體可以參見《MongoDB權威指南》、《MongoDB實戰》、《深入學習MongoDB》等書。

第5章介紹了Meteor的重頭之一——響應式程式設計,利用Meteor資料庫無處不在的原則,並使用只存在於客戶端的本地集合。這樣做的好處在於,你對資料/表單的更改變化在介面上直接反應出來,不用等到資料提交到後臺再被取回前端再渲染,實際上就消除了等待資料往返後端的時間,在使用者體驗上自然能得到更好的效果。

生產環境中的Web應用肯定離不開使用者註冊和登入,以及認證(authentication)和授權(authorization),並且要更細粒度的方式來定義使用者許可權,這些工作如果是自己開發,那都是很繁瑣的事情,而且安全性 ? 還是個問題。而Meteor已經幫你把這件事給做好了,你幾乎不需要再寫任何程式碼。當然,你也可以不自建使用者名稱和密碼系統。使用常見的社交賬戶登入到你的應用可以降低註冊的門檻,這種方式我們稱為OAuth(Open Authorization),Meteor整合了諸如微博、臉書、GitHub、推特、谷歌等賬號登入的API,你只要敲下“meteor add accounts-facebook”這樣型別的指令就夠了。

結合使用者認證和授權,Meteor就可以輕鬆的根據使用者許可權和系統配置來實現使用者資料的釋出和訂閱,比如通過文件欄位(比如使用者/所有者ID)來安全地限制所釋出的資料,或者確保客戶端提供的所有資料在使用前都進行了驗證。

第8章介紹的是Meteor的路由、第9章是Meteor的包管理,這些內容在各種前端框架中都比較常見,所以不再贅述。


關於Meteor的下載、開發和部署,個人建議可以使用docker來幫助我們,有一個很好用的開源專案 meteor-up,使用 docker 來執行 Meteor 和 MongoDB,並且可以方便的把本地 Meteor 部署到雲服務上。只要你有一些docker的基礎,藉助 meteor-up來實現不是一件難事。


總結,Meteor的主要優點如下:

1、容易學習,與正統MEAN棧相比,新開發人員不必對鬆耦合的前端庫和後端框架進行深入地研究,就可以實現一些應用。對JavaScript有些基本的瞭解就足夠開始。

2、大部分應用可以在客戶端上執行,好處是:伺服器的負載會較小,使用者介面的響應很快,使用者體驗比較好。

3、程式碼可重用,由於Meteor的同構(Javascript)性質,同樣的程式碼可以在瀏覽器中、伺服器上甚至是移動裝置上執行。

4、強大的命令列工具,Meteor提供了開箱即用軟體包管理和構建管理工具,覆蓋了整個構建過程,從收集和編譯原始檔到檔案精簡、源對映、解決依賴關係等等,讓你把心思用在業務邏輯上。


如果你需要一個快速的應用原型開發工具 ? ,那麼Meteor一定是一個優秀的選擇 ☑️ 。

相關文章