2022 最值得使用的Node.js框架及选择不完全指北

2,805 阅读7分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

前言

大家好,我是 Taylor,一个有趣且乐于分享的人,目前专注前端、Node.js技术栈分享,如果你对 前端、Node.js 学习感兴趣的话(后续有计划也可以),可以关注我掘金.

Node.js 是最受欢迎的 JavaScript Runtime,各位小伙肯定会遇到框架选择的问题,用nest呢还是midway呢, egg呢还是koa呢 ??

今天就来聊聊热门的Node.js 框架 及选择的问题。

以下是具体框架分析

Midwayjs

面向未来的node框架

昨天刚发布了3.6版本

www.bilibili.com/video/BV1ZB…

国人开源的热度比较高框架,对标Nestjs 当然得支持一下。

学习成本指数 ❤️❤️❤❤️❤️ 5颗星

官网

midwayjs.org/

简介

github 6k github.com/midwayjs/mi…

image.png

Midway 是阿里巴巴 - 淘宝前端架构团队,基于渐进式理念研发的 Node.js 框架,通过自研的依赖注入容器,搭配各种上层模块,组合出适用于不同场景的解决方案。

Midway 基于 TypeScript 开发,结合了面向对象(OOP + Class + IoC)函数式(FP + Function + Hooks)两种编程范式,并在此之上支持了 Web / 全栈 / 微服务 / RPC / Socket Serverless 等多种场景,致力于为用户提供简单、易用、可靠的 Node.js 服务端研发体验。

特点

  • 良好的 TypeScript 定义支持, 构建可维护的node项目
  • 阿里内部已经使用 5 年以上的 Node.js 框架,有着长期投入和持续维护的团队做后盾
  • 国产化文档和沟通容易简单
  • 支持 面向对象(OOP + Class + IoC)函数式(FP + Function + Hooks)两种编程范式
  • 支持Serverless
  • midway hooks 进行全栈开发

Nestjs

node中第一个Spring

学习成本指数 ❤️❤️❤❤️❤️ 5颗星

官网

docs.nestjs.cn/

简介

github github.com/nestjs/nest stars数 51K

Nest.js是用于构建高效且可伸缩的服务端应用程序的渐进式 Node.js 框架。

它利用 JavaScript 的渐进增强的能力,使用并完全支持 TypeScript (仍然允许开发者使用纯 JavaScript 进行开发),并结合了 OOP (面向对象编程)、FP (函数式编程)和 FRP (函数响应式编程)。

如果使用过 JAVA 的框架Spring的,那就可以了解到,nestjs 很像 Spring,只不过语法改为了 javascript,这个框架基于模块的开发方式,每个功能都可以认为是一个模块,可以自己调用,也可以被其他模块调用,每个模块又是单独的。

image.png

特点

  • 构建高度可扩展且易于维护的应用程序。
  • 过去 3 年来增长最快的 Node.js 框架。
  • 大型社区和支持系统。
  • IOC控制反转。

eggjs

阿里开源的企业开发框架

学习成本指数 ❤️❤️❤️ 3颗星

官网

www.eggjs.org/

简介

github 18.2k github.com/eggjs/egg

image.png

Egg.js 为企业级框架和应用而生,希望由 Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。它继承了Koajs的高性能优点,同时又加入了一些约束与开发规范,来规避Koajs框架本身的开发自由度太高的问题。Egg 提供了一个更加强大的插件机制,让这些独立领域的功能模块可以更加容易编写。

egg不同于koa那样很单薄,他更加完善,约定了目录结构, 有着丰富的插件, 让开发着关注业务本身, 适合企业快速开发。

特点

  • 提供基于 Egg 定制上层框架的能力;
  • 高度可扩展的微内核、插件机制;
  • 内置多进程管理;
  • 基于 Koa
  • 渐进式开发。

对Typescript支持一般, 建议拥抱Midway!

Thinkjs

高效的企业级开发框架

学习成本指数 ❤️❤️❤️ 3颗星

官网

thinkjs.org/

简介

github 6k image.png

ThinkJS 是360奇舞团开源的Node.js框架,整合了大量的项目最佳实践,让企业级开发变得更简单、高效。

thinkjs为什么叫thinkjs, 显而易见, 是因为借鉴了thinkPHP的设计思想

对于熟悉thinkPhP的小伙伴还说, 上手thinkjs几乎没有框架学习成本,都是一个套路。

约定式路由 thinkPHP一样的ORM

thinkjs架构图

image.png

特点

  • 基于 Koa 2.x,兼容 middleware
  • 用过之后, 你就感觉他像Iphone, 都给你想好了, 别的是安卓。
  • 支持 约定式路由(文件路由)
  • 集成大量企业实践、开发效率高
  • 内核小巧,支持 Extend、Adapter 等插件方式
  • 性能优异,单元测试覆盖程度高

更新

目前是版本是3.0, 上一次发布是在2018年, 因此好多小伙伴提到都说它凉了,其实也是在维护的, 现在用来开发一般企业应用还是没问题的。

koajs

学习成本指数 ❤️ 1颗星

官网

koajs.com/

简介

github 33.2k github.com/koajs/koa

image.png

koajs内核小巧, 源码只有四个文件.

他很纯粹,就是一个http框架, 非常适合我们学习node.js、或者在他基础上定制自己的开发框架。

它最核心的就是洋葱圈模型, 用面向切面的思想把请求流程串起来。

image.png

特点

  • 内核小巧
  • 经典的洋葱圈模型
  • 主流node应用的底座
  • 易于上手、适合初学

express

学习成本指数 ❤️ 1颗星

官网

www.expressjs.com.cn/

简介

github 58.5K github.com/expressjs/e…

Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。

特点

  • 和koa一样学习成本低
  • Node.JS 诞生之初,最早出现的一款框架,现在仍然被广泛使用。
  • 应用广泛,又有典型架构,很适合作为初学的目标。

选择问题(需求出发)

我们选择一个框架, 首先要明白我们的目的, 是入门学习? 还是开发企业应用? 目的不一样,选择也应该不一样。

就像面试别人,我们也得搞清楚招聘需求, 比如帮别人招外包, 那可能要求就是要一个能干活的人就行; 如果本部肯定期望要一个有进取精神,能帮助团队提效的人。

学习

如果是初学Node.js用, 我建议用koaexpress开始, 为什么呢?

因为 koa和express都很简洁。

没有过多的封装, 做一个功能,比如上传文件, 你得自己去装对应的解析文件的包, 锻炼动手能力, 也方便初学者理解他们的运行机制和实现原理。

(企业)开发项目

如果 用来进行企业应用开发, 我们的追求一般是快速开发、健壮、可维护的程序。

至少满足以下。

  • 良好的架构设计
  • 规范目录 router、controller、service、model、logic、middware等
  • 拥抱Typescript
  • 代码复用
  • 等等等

根据自己团队实际情况选择(大家的水平、学习成本等),以下仅供参考。

第一层(顶层) nestjs、midwayjs

  • 对Typescript的全面支持、构建大型应用必备
  • 参考java spring的风格,使用装饰器(node里的Spring)。
  • Nest是过去 3 年来增长最快的 Node.js 框架。
  • 有代码结构和模块编写规范。

缺点可能就是,果不熟悉 JavaSpring 的话, 上手需要一定学习成本, 学习成本相对最高。

第二层 eggjs、thinkjs、sails.js等

  • 易于上手、学习成本低。
  • 有代码结目录构和规范。
  • 企业快速开发。

以上两层我理解都属于上层框架、开箱即用。

第三层 express、koa

适合有时间有能力的企业封装自己的一套 这样做的整体代码很轻。

缺点

  • 本身很单薄,只有http中间件。
  • 没有代码结目录构和规范, 假如换了几批人, 代码结构将面目全非。
  • 这两都需要开发者做大量的封装, 不适合企业级快速开发,如果想快速开发, 专注业务,还是建议选择上面的。

总结

根据需求,和实际情况选择即可, 有想法的小伙伴, 欢迎评论区开撕!