Skip to content

Commit

Permalink
add post
Browse files Browse the repository at this point in the history
  • Loading branch information
冯道廷 committed Nov 5, 2024
1 parent f1f2432 commit 88f4378
Showing 1 changed file with 72 additions and 0 deletions.
72 changes: 72 additions & 0 deletions _posts/2024/2024-11-05-node-platform.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
---
layout: mypost
title: 2024年了,nodejs框架怎么选?
tags: [前端]
---

## 背景

昨天看了一篇文章,讲述的是《[裸辞四个月,前端仔靠着 Nest 绝境收下 offer](https://mp.weixin.qq.com/s/oa8yhCoR3IpKG2eGRhgJwQ)》,其中说到:

> “当有 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 主要面向中国市场,英文文档和国际化支持相对不足,适合对框架依赖程度较高的项目,且学习曲线也比较高。

### 综合比较和选型建议

```markdown
| 框架 | 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 的理由,你会心动么?](https://juejin.cn/book/7226988578700525605/section/7238472356557570103)》,其实没那么多选择,**企业级开发, Nest 基本是唯一的选择了。**

所以,最终胜出者:NestJS。

0 comments on commit 88f4378

Please sign in to comment.