2024年了,nodejs框架怎么选?

Daotin 2024-11-05 编辑

背景

昨天看了一篇文章,讲述的是《裸辞四个月,前端仔靠着 Nest 绝境收下 offer》,其中说到:

“当有 2 家自研公司在对我面试时,我抛出了熟悉 nest 开发后。面试官感觉眼神都不一样了,这是真实的。然后这两家公司面试完后,我总结下来,1 个小时有大概半小时都是在谈论服务端开发对前端的助益,更多的是关于 fp 开发与 oop 开发的区别,有哪些收获?除此池外,我们还会不停探讨关于设计模式、数据库方面的话题,如:表关系、如何解耦之类的。也就是说,有面试官一直在挖掘你的深度、广度。你和面试官侃侃而谈,自然结果不会差!”

我读完后的感悟是:差异化竞争,人无我有,人有我优。

“这不是以前,人人都会 Jquery,但是你会 Vue 或者 React 你就有了更强竞争力,现在前端的活,更多都是围绕做界面,做交互,现在 Vue、React、Ts 谁不会用呢?因此主要竞争力方面,人人都难分高下,就需要靠别的附加价值去击败别人,因此无论是工程化方面也好,服务端知识也好,本身就是附加价值的一个体现。”

于是,就准备学 nodejs,也有了这篇文章。

分析

下面是对几个常见 Node.js 框架的优缺点介绍,最后会给出一个综合比较和选型建议的表格,帮助你更好地理解它们的特性和适用场景。

1. NestJS

  • 优点:NestJS 是一个基于 TypeScript 的框架,结构类似于 Angular,支持依赖注入和模块化开发,内置支持 GraphQL 和 WebSocket,非常适合大型应用的开发。它还有丰富的插件系统,良好的文档和活跃的社区。
  • 缺点:NestJS 的学习曲线较陡,尤其对初学者可能不太友好。此外,它相对较重,适合结构化清晰的中大型项目,小型项目可能显得有些复杂。

2. Express

  • 优点:Express 是 Node.js 最早、最受欢迎的框架之一,简洁、灵活、成熟,适合构建快速开发、轻量级的 Web 应用。它的生态系统庞大,拥有大量插件,几乎可以满足任何需求。
  • 缺点:Express 比较偏底层,缺少约束和结构化支持。随着项目规模扩大,代码的可维护性可能会下降。此外,它本身不支持 TypeScript,但可以通过配置来支持。

3. Koa

  • 优点:Koa 是由 Express 的开发团队创建的一个轻量级框架,专注于简化中间件的编写。它提供更现代化的 API,如 async/await,比 Express 更加简洁和模块化,适合高度定制化的项目。
  • 缺点:Koa 没有内置的路由和中间件管理,因此需要额外安装和配置。它更加灵活,但也意味着开发者需要更精细地控制项目结构,对初学者可能不太友好。

4. Fastify

  • 优点:Fastify 主打性能,适合需要极高吞吐量的 API 服务。它内置 JSON schema 验证,自动生成 API 文档,并且和 Express 非常相似,易于学习和迁移。其插件系统和 TypeScript 支持也非常优秀。
  • 缺点:Fastify 的生态相对较小,和 Express 相比,第三方插件可能较少。虽然是轻量化框架,但在处理复杂业务时,可能会有一些限制。

5. Egg.js

  • 优点:Egg.js 是阿里巴巴推出的企业级框架,专注于提升可维护性、插件化开发,适合大规模项目。它内置强大的插件体系,非常适合大型企业应用开发。
  • 缺点:Egg.js 主要面向中国市场,英文文档和国际化支持相对不足,适合对框架依赖程度较高的项目,且学习曲线也比较高。

综合比较和选型建议

框架 GitHub Stars 特点 优势 劣势 适用场景
NestJS 67.6k 面向大型项目,模块化支持 强大的 TypeScript 支持、结构化清晰 学习曲线较高,对小项目有些重 大中型企业应用
Express 65.6k 轻量、灵活 庞大生态系统、上手简单 结构化差,项目变大后维护困难 轻量、快速开发
Koa 35.2k 现代化、模块化 更灵活的中间件机制,支持 async/await 缺少内置中间件,需要更多配置 定制化的应用
Fastify 32.3k 高性能,适合 API 服务 极高性能、内置 JSON schema 支持 第三方生态相对较小 高吞吐量的 API 服务
Egg.js 18.9k 企业级框架 强大的插件体系,适合大规模应用 学习曲线高,国际化支持不足 大型企业应用,特别在中国市场

选型建议

  • 小型项目:如果你需要一个轻量级、快速上手的框架,Express 是不错的选择,尤其适合小型 Web 应用。
  • 定制化项目:如果项目需要高度定制化,Koa 是很好的选择,提供了极简的核心,可以自由配置。
  • 高性能 API:如果关注性能,Fastify 是首选,它提供了极高的吞吐量,非常适合微服务架构。
  • 大型项目:NestJS 非常适合需要清晰架构的大型项目,它的模块化设计能够很好地管理复杂的业务。
  • 企业应用:对于企业级应用,特别是中国市场,Egg.js 的插件体系可以帮助你快速构建高质量的应用。

最后

看了神光大佬的《给你 5 个学习 Nest 的理由,你会心动么?》,其实没那么多选择,企业级开发, Nest 基本是唯一的选择了。

所以,最终胜出者:NestJS。