Egg.js 是什么

Egg.js 为企业级框架和应用而生。我们希望 Egg.js 能孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。

注:Egg.js 的缩写为 Egg

设计原则

我们深知企业级应用在追求规范和共建的同时,还需考虑如何平衡不同团队之间的差异,求同存异。因此,我们没有选择社区常见的大集市模式(如集成数据库、模板引擎、前端框架等),而是专注于提供 Web 开发的核心功能和灵活可扩展的插件机制。我们不会做出技术选型,这是因为一旦技术选型固定,框架的扩展性就会变差,无法满足各种定制需求。通过 Egg,企业的架构师和技术负责人能够轻松地在 Egg 基础上,扩展出符合自身技术架构和业务场景的框架。

Egg 的插件机制具备很高的可扩展性,一个插件仅完成一件事情(例如 Nunjucks 模板封装成了 egg-view-nunjucks,MySQL 数据库封装成了 egg-mysql)。Egg 通过框架聚合这些插件,并根据自己的业务场景定制配置,从而极大降低了应用的开发成本。

Egg 奉行“约定优于配置”。按照一套统一的约定开发应用时,团队成员可以减少学习成本,不再是“钉子”,能流动起来。未有约定的团队,沟通成本极高,因为每个人的开发习惯可能都不同,容易犯错。但约定并不意味着扩展性差,Egg 的扩展性极高,可根据不同团队的约定来定制框架。使用 Loader,框架能够根据不同环境定义默认配置,并覆盖 Egg 的默认约定。

与社区框架的差异

Express 是 Node.js 社区广泛使用的框架,简洁且扩展性强,很适合个人项目。不过,由于缺少约定,MVC 模型实现方式多种多样。Egg 则是按照固定约定进行开发,低协作成本。

Sails 也是奉行“约定优于配置”的框架,扩展性同样很好。相比 Egg,Sails 提供了 Blueprint REST API、Waterline 这样的 ORM、前端集成、WebSocket 等功能。而 Egg 不会直接提供这些功能,但可以聚合各种功能插件(如 egg-blueprint,egg-waterline 等),再用 sails-egg 框架整合这些插件后,就可以替代 Sails

特性