最近在学习研究 Nest 框架,可是在学习过程当中除了参考翻阅官方文档外国内几乎没有多少资料能系统的讲解 Nest 的相关内容,因此打算想经过我本身学习的角度讲解下 Nest 框架,不知道能坚持多久,也可能有错误或遗漏的地方,欢迎你们批评指正。node
下面我学习 Nest 的主要信息来源,在编写过程当中还会有其余途径获取的信息会在文末给出:git
官网:https://nestjs.com/github
中文网站:https://docs.nestjs.cn/typescript
GitHub: https://github.com/nestjs/nestshell
Nest 是一个用于构建高效,可扩展的 Node.js 服务器端应用程序的框架。它使用渐进式 JavaScript,内置并彻底支持 TypeScript(但仍然容许开发人员使用纯 JavaScript 编写代码)并结合了 OOP(面向对象编程),FP(函数式编程)和 FRP(函数式响应编程)的元素。express
Nest 框架底层 HTTP 平台默认是基于 Express 实现的,因此无需担忧第三方库的缺失。 Nest 旨在成为一个与平台无关的框架。 经过平台,能够建立可重用的逻辑部件,开发人员能够利用这些部件来跨越多种不一样类型的应用程序。 从技术上讲,Nest 能够在建立适配器 后使用任何 Node HTTP 框架。 有两个支持开箱即用的 HTTP 平台:express 和 fastify。npm
Nest 提供了一个开箱即用的应用程序架构,容许开发人员和团队建立高度可测试,可扩展,松散耦合且易于维护的应用程序。编程
在利用 NestJs 框架中,开发者能够体验到 NestJs 清晰的模块组织方式,隔离应用的各个工做区间;在各类工做区间都涉及不同的设计模式,好比面向对象的SOLID原则在整个应用构建中的体现,AOP、DI、IoC 等在各个核心部件中的应用,OOP、FP、FRP 在各模块编码中的完美结合,都给开发中带来不同的体验。json
若是是一个简单的应用,其实用什么框架都无所谓,一个框架用 100 行代码实现,另外一个用 80 行,区别不大。但涉及到企业级的应用,分分钟有上万行的代码,代码的组织结构就变得很重要了。若是代码拆分不合理,一个 JS 文件就有上千行的代码,后期的维护成本会很是的高。再考虑到复杂项目参与者众多,没有一个规范去约束的话,每一个人写出来的代码风格迥异,协做起来会很难受。上文提到的几个框架对项目代码的架构要么是没约束,要么就是约束比较弱或者看起来很别扭。相比之下Nest的实现就很简洁,用起来很顺手。设计模式
在安装前请确保您的操做系统上安装了 Node.js(> = 8.9.0)。
$ npm i -g @nestjs/cli $ nest new project-name
$ git clone https://github.com/nestjs/typescript-starter.git project $ cd project $ npm install $ npm run start
$ npm i --save @nestjs/core @nestjs/common rxjs reflect-metadata
$ nest start
而后咱们访问 http://localhost:3000 就能够看到 Hello World! 了。
从上面的命令行中能够看出来整个项目是用 ts-node 跑起来的,这样的目的就是在开发环境节去了编译 .ts 的过程(其实是 ts-node 在背后作了这个事情)。和其余 ts-node 项目不一样的是,大多数 ts-node 运行在内存中,可是咱们经过项目目录发如今 start 时会产生一个 dist 目录,哪怕是在开发环境其实咱们访问的也是 dist 文件中的内容, 咱们能够经过修改 tsconfig.json 中的 outDir 来修改输出的目录地址。
若是想要 watch 文件的修改建议使用 npm run start:dev
启动项目。
好了,今天这节就讲到这里,后续咱们会针对 AOP、DI、IoC、OOP、FP、FRP 以及依赖注入容器和模块化封装等名称做单独的解释。