持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情
前言
大家好,我是 Taylor,一个有趣且乐于分享的人,目前专注前端、Node.js技术栈分享,如果你对 前端、Node.js 学习感兴趣的话(后续有计划也可以),可以关注我掘金.
Node.js 是最受欢迎的 JavaScript Runtime,各位小伙肯定会遇到框架选择的问题,用nest呢还是midway呢, egg呢还是koa呢 ??
今天就来聊聊热门的Node.js 框架 及选择的问题。
以下是具体框架分析
Midwayjs
面向未来的node框架
昨天刚发布了3.6版本
国人开源的热度比较高框架,对标Nestjs 当然得支持一下。
学习成本指数 ❤️❤️❤❤️❤️ 5颗星
官网
简介
github 6k github.com/midwayjs/mi…
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颗星
官网
简介
github github.com/nestjs/nest stars数 51K
Nest.js是用于构建高效且可伸缩的服务端应用程序的渐进式 Node.js 框架。
它利用 JavaScript 的渐进增强的能力,使用并完全支持 TypeScript (仍然允许开发者使用纯 JavaScript 进行开发),并结合了 OOP (面向对象编程)、FP (函数式编程)和 FRP (函数响应式编程)。
如果使用过 JAVA 的框架Spring的,那就可以了解到,nestjs 很像 Spring,只不过语法改为了 javascript,这个框架基于模块的开发方式,每个功能都可以认为是一个模块,可以自己调用,也可以被其他模块调用,每个模块又是单独的。
特点
- 构建高度可扩展且易于维护的应用程序。
- 过去 3 年来增长最快的 Node.js 框架。
- 大型社区和支持系统。
- IOC控制反转。
eggjs
阿里开源的企业开发框架
学习成本指数 ❤️❤️❤️ 3颗星
官网
简介
github 18.2k github.com/eggjs/egg
Egg.js 为企业级框架和应用而生,希望由 Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。它继承了Koajs的高性能优点,同时又加入了一些约束与开发规范,来规避Koajs框架本身的开发自由度太高的问题。Egg 提供了一个更加强大的插件机制,让这些独立领域的功能模块可以更加容易编写。
egg不同于koa那样很单薄,他更加完善,约定了目录结构, 有着丰富的插件, 让开发着关注业务本身, 适合企业快速开发。
特点
- 提供基于 Egg 定制上层框架的能力;
- 高度可扩展的微内核、插件机制;
- 内置多进程管理;
- 基于 Koa
- 渐进式开发。
对Typescript支持一般, 建议拥抱Midway!
Thinkjs
高效的企业级开发框架
学习成本指数 ❤️❤️❤️ 3颗星
官网
简介
github 6k
ThinkJS 是360奇舞团开源的Node.js框架,整合了大量的项目最佳实践,让企业级开发变得更简单、高效。
thinkjs为什么叫thinkjs, 显而易见, 是因为借鉴了thinkPHP的设计思想
对于熟悉thinkPhP的小伙伴还说, 上手thinkjs几乎没有框架学习成本,都是一个套路。
约定式路由 thinkPHP一样的ORM
thinkjs架构图
特点
- 基于 Koa 2.x,兼容 middleware
用过之后, 你就感觉他像Iphone, 都给你想好了, 别的是安卓。- 支持 约定式路由(文件路由)
- 集成大量企业实践、开发效率高
- 内核小巧,支持 Extend、Adapter 等插件方式
- 性能优异,单元测试覆盖程度高
更新
目前是版本是3.0, 上一次发布是在2018年, 因此好多小伙伴提到都说它凉了,其实也是在维护的, 现在用来开发一般企业应用还是没问题的。
koajs
学习成本指数 ❤️ 1颗星
官网
简介
github 33.2k github.com/koajs/koa
koajs内核小巧, 源码只有四个文件.
他很纯粹,就是一个http框架, 非常适合我们学习node.js、或者在他基础上定制自己的开发框架。
它最核心的就是洋葱圈模型, 用面向切面的思想把请求流程串起来。
特点
- 内核小巧
- 经典的洋葱圈模型
- 主流node应用的底座
- 易于上手、适合初学
express
学习成本指数 ❤️ 1颗星
官网
简介
github 58.5K github.com/expressjs/e…
Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。
特点
- 和koa一样学习成本低
- Node.JS 诞生之初,最早出现的一款框架,现在仍然被广泛使用。
- 应用广泛,又有典型架构,很适合作为初学的目标。
选择问题(需求出发)
我们选择一个框架, 首先要明白我们的目的, 是入门学习? 还是开发企业应用?
目的不一样,选择也应该不一样。
就像面试别人,我们也得搞清楚
招聘需求, 比如帮别人招外包, 那可能要求就是要一个能干活的人就行; 如果本部肯定期望要一个有进取精神,能帮助团队提效的人。
学习
如果是初学Node.js用, 我建议用koa和express开始, 为什么呢?
因为 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中间件。
- 没有代码结目录构和规范, 假如换了几批人, 代码结构将面目全非。
- 这两都需要开发者做大量的封装, 不适合企业级快速开发,如果想快速开发, 专注业务,还是建议选择上面的。
总结
根据需求,和实际情况选择即可, 有想法的小伙伴, 欢迎评论区开撕!