Egg.js 為企業(yè)級框架和應(yīng)用而生,我們希望由 Egg.js 孕育出更多上層框架,幫助開發(fā)團(tuán)隊和開發(fā)人員降低開發(fā)和維護(hù)成本。
注:Egg.js 縮寫為 Egg
我們深知企業(yè)級應(yīng)用在追求規(guī)范和共建的同時,還需要考慮如何平衡不同團(tuán)隊之間的差異,求同存異。所以我們沒有選擇社區(qū)常見框架的大集市模式(集成如數(shù)據(jù)庫、模板引擎、前端框架等功能),而是專注于提供 Web 開發(fā)的核心功能和一套靈活可擴(kuò)展的插件機(jī)制。我們不會做出技術(shù)選型,因為固定的技術(shù)選型會使框架的擴(kuò)展性變差,無法滿足各種定制需求。通過 Egg,團(tuán)隊的架構(gòu)師和技術(shù)負(fù)責(zé)人可以非常容易地基于自身的技術(shù)架構(gòu)在 Egg 基礎(chǔ)上擴(kuò)展出適合自身業(yè)務(wù)場景的框架。
Egg 的插件機(jī)制有很高的可擴(kuò)展性,一個插件只做一件事(比如 Nunjucks 模板封裝成了 egg-view-nunjucks、MySQL 數(shù)據(jù)庫封裝成了 egg-mysql)。Egg 通過框架聚合這些插件,并根據(jù)自己的業(yè)務(wù)場景定制配置,這樣應(yīng)用的開發(fā)成本就變得很低。
Egg 奉行『約定優(yōu)于配置』,按照一套統(tǒng)一的約定進(jìn)行應(yīng)用開發(fā),團(tuán)隊內(nèi)部采用這種方式可以減少開發(fā)人員的學(xué)習(xí)成本,開發(fā)人員不再是『釘子』,可以流動起來。沒有約定的團(tuán)隊,溝通成本是非常高的,比如有人會按目錄分棧而其他人按目錄分功能,開發(fā)者認(rèn)知不一致很容易犯錯。但約定不等于擴(kuò)展性差,相反 Egg 有很高的擴(kuò)展性,可以按照團(tuán)隊的約定定制框架。使用 Loader 可以讓框架根據(jù)不同環(huán)境定義默認(rèn)配置,還可以覆蓋 Egg 的默認(rèn)約定。
Express 是 Node.js 社區(qū)廣泛使用的框架,簡單且擴(kuò)展性強(qiáng),非常適合做個人項目。但框架本身缺少約定,標(biāo)準(zhǔn)的 MVC 模型會有各種千奇百怪的寫法。Egg 按照約定進(jìn)行開發(fā),奉行『約定優(yōu)于配置』,團(tuán)隊協(xié)作成本低。
Sails 是和 Egg 一樣奉行『約定優(yōu)于配置』的框架,擴(kuò)展性也非常好。但是相比 Egg,Sails 支持 Blueprint REST API、WaterLine 這樣可擴(kuò)展的 ORM、前端集成、WebSocket 等,但這些功能都是由 Sails 提供的。而 Egg 不直接提供功能,只是集成各種功能插件,比如實現(xiàn) egg-blueprint,egg-waterline 等這樣的插件,再使用 sails-egg 框架整合這些插件就可以替代 Sails 了。
更多建議: