Egg.js 是什么?

2020-02-06 10:54 更新

Egg.js 為企業(yè)級框架和應(yīng)用而生,我們希望由 Egg.js 孕育出更多上層框架,幫助開發(fā)團(tuán)隊(duì)和開發(fā)人員降低開發(fā)和維護(hù)成本。

注:Egg.js 縮寫為 Egg

設(shè)計(jì)原則

我們深知企業(yè)級應(yīng)用在追求規(guī)范和共建的同時(shí),還需要考慮如何平衡不同團(tuán)隊(duì)之間的差異,求同存異。所以我們沒有選擇社區(qū)常見框架的大集市模式(集成如數(shù)據(jù)庫、模板引擎、前端框架等功能),而是專注于提供 Web 開發(fā)的核心功能和一套靈活可擴(kuò)展的插件機(jī)制。我們不會做出技術(shù)選型,因?yàn)楣潭ǖ募夹g(shù)選型會使框架的擴(kuò)展性變差,無法滿足各種定制需求。通過 Egg,團(tuán)隊(duì)的架構(gòu)師和技術(shù)負(fù)責(zé)人可以非常容易地基于自身的技術(shù)架構(gòu)在 Egg 基礎(chǔ)上擴(kuò)展出適合自身業(yè)務(wù)場景的框架。

Egg 的插件機(jī)制有很高的可擴(kuò)展性,一個(gè)插件只做一件事(比如 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)隊(duì)內(nèi)部采用這種方式可以減少開發(fā)人員的學(xué)習(xí)成本,開發(fā)人員不再是『釘子』,可以流動(dòng)起來。沒有約定的團(tuán)隊(duì),溝通成本是非常高的,比如有人會按目錄分棧而其他人按目錄分功能,開發(fā)者認(rèn)知不一致很容易犯錯(cuò)。但約定不等于擴(kuò)展性差,相反 Egg 有很高的擴(kuò)展性,可以按照團(tuán)隊(duì)的約定定制框架。使用 Loader 可以讓框架根據(jù)不同環(huán)境定義默認(rèn)配置,還可以覆蓋 Egg 的默認(rèn)約定。

與社區(qū)框架的差異

Express 是 Node.js 社區(qū)廣泛使用的框架,簡單且擴(kuò)展性強(qiáng),非常適合做個(gè)人項(xiàng)目。但框架本身缺少約定,標(biāo)準(zhǔn)的 MVC 模型會有各種千奇百怪的寫法。Egg 按照約定進(jìn)行開發(fā),奉行『約定優(yōu)于配置』,團(tuán)隊(duì)協(xié)作成本低。

Sails 是和 Egg 一樣奉行『約定優(yōu)于配置』的框架,擴(kuò)展性也非常好。但是相比 Egg,Sails 支持 Blueprint REST API、WaterLine 這樣可擴(kuò)展的 ORM、前端集成、WebSocket 等,但這些功能都是由 Sails 提供的。而 Egg 不直接提供功能,只是集成各種功能插件,比如實(shí)現(xiàn) egg-blueprint,egg-waterline 等這樣的插件,再使用 sails-egg 框架整合這些插件就可以替代 Sails 了。

特性

  • 提供基于 Egg 定制上層框架的能力
  • 高度可擴(kuò)展的插件機(jī)制
  • 內(nèi)置多進(jìn)程管理
  • 基于 Koa 開發(fā),性能優(yōu)異
  • 框架穩(wěn)定,測試覆蓋率高
  • 漸進(jìn)式開發(fā)


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號