初识Nest JS

Nest 是一个渐进的 Node.js 框架,它可以在 TypeScript 和 JavaScript (ES6、ES7、ES8)之上构建高效、可伸缩的企业级服务器端应用程序。

Nest 基于 TypeScript 编写并且结合了 OOP(面向对象编程),FP(函数式编程)和 FRP (函数式响应编程)的相关理念。在设计上的很多灵感来自于 Angular,Angular 的很多模式又来自于 Java 中的 Spring 框架,依赖注入、面向切面编程等,所以我们也可以认为:Nest 是 Node.js 版的 Spring 框架

Nest 框架底层 HTTP 平台默认是基于 Express 实现的,所以无需担心第三方库的缺失。

NestJs 的核心思想:就是提供了一个层与层直接的耦合度极小,抽象化极高的一个架构体系。

脚手架 NestJS CLI

与其它框架一样,NestJS也有自己的脚手架,它可帮助我们快速初始化Nest项目以及开发和维护 Nest 应用程序。

安装

绝大多数人可能会选择全局安装,因为方便,但需要注意的是,全局安装任何npm软件包都会将确保它们运行正确版本的责任留给我们开发者自身。这还意味着,如果你有不同的项目,每个项目都将运行相同版本的 CLI。

npm install -g @nestjs/cli

️这里需要注意Node版本,可能会遇到脚手架安装成功了但初始化项目时报错,这里建议使用高版本node,我这里用是node版本是16.19.0

当然你也可以不选择全局安装,Nest提供了@nestjs/cli包同样可以使用nest命令

npx @nestjs/cli@latest

nest命令

安装完脚手架之后我们可以通过nest --help看看它都有哪些命令:

new|n

该命令是用来初始化一个Nest项目的

nest new project-name

该命令表示初始化一个名为project-nameNest项目,并且会帮你安装好所有必要的依赖,简直就是一步到位,非常棒~

上图中我们可以看到nest|nn代表nest的别名,所以为了方便,你也可以这样使用:

nest n project-name

generate|g

该命令可以为我们生成各种代码,其中包括:控制器Controller、服务service、模块module等。

# 生成控制器
nest generate controller controller-name # 生成服务
nest generate service service-name # 生成模块
nest generate module module-name

当你觉得一个一个生成很麻烦时,可以使用下面这个命令

nest g resource filename

当你执行这个命令时,它会让你选择生成那种类型的代码:

这里我们直接选择REST API,它会再问你是否需要生成CURD代码

我们选择是就好了,这个它就为我们生成了一个完整的CURD代码。

我们会发现生成的文件中可能会有一些测试文件,当我们不需要这些文件时,可以直接删除掉,或者在生成时加上--no-spec表示不生成测试文件

nest g resource filename --no-spec

当然它还可以生成更多类型的代码,可以通过以下命令查看:

nest g --help

start

该命令用于启动开发服务,支持 watch 和调试

# 启动
nest start # 启动并监听文件变动
nest start --watch #启动并调试
nest start --debug --watch

这些命令可以在package.json文件中找到

所以我们本地开发一般使用npm run start:dev启动项目

build

该命令用于项目打包

nest build

它有两种编译方式可选:--wepback--tsc ,默认是 tsc 编译,也可以切换成 webpack。

区别在于tsc模式并不会将node_modules模块打包进去,而webpack模式则会将node模块打包成单文件

脚手架配置文件

Nest脚手架与其它脚手架不同的是,它生成的项目下会有一个脚手架配置文件nest-cli.json,上面我们用的命令的很多选项都可以在这个文件中直接配置。

该文件的顶级属性如下:

  • "collection":指向用于生成组件的原理图集合;(最好不要改)
  • "sourceRoot":指向标准模式结构中单个项目的源代码根目录,或monorepo 模式结构中的默认项目
  • "compilerOptions":编译相关的配置选项
  • "generateOptions":全局生成相关的配置选项
  • "monorepo":(仅限 monorepo)对于 monorepo 模式结构,该值始终为true
  • "root":(仅限 monorepo)指向默认项目的项目根目录

全局编译选项

这些属性指定要使用的编译器以及影响任何编译步骤的各种选项,无论是作为nest build或的一部分nest start,也不考虑编译器,无论tsc是还是 webpack。

名称 描述
webpack 如果是true,使用webpack编译。如果false存在或不存在,请使用tsc. 在 monorepo 模式下,默认为true(use webpack),在标准模式下,默认为false(use tsc)。
tsConfigPath (仅 monorepo ) 指向包含在不带选项的情况下调用或调用tsconfig.json时将使用的设置的文件(例如,当构建或启动默认项目时)。nest build``nest start``project
webpackConfigPath 指向 webpack 选项文件。如果未指定,Nest 会查找文件webpack.config.js. 请参阅下面的更多细节。
deleteOutDir 如果true,则每当调用编译器时,它都会首先删除编译输出目录(如 中配置tsconfig.json,默认为./dist)。
assets 每当编译步骤开始时,启用自动分发非 TypeScript 资源(在增量编译模式下不会发生资源--watch分发)。详情请参阅下文。
watchAssets 如果true,则以监视模式运行,监视所有非 TypeScript 资源。
manualRestart 如果,则启用手动重新启动服务器的true快捷方式。rs默认值为false
builder 指示 CLI 使用什么builder来编译项目(tscswcwebpack)。要自定义构建器的行为,您可以传递包含两个属性的对象:type( tscswcwebpack) 和options
typeCheck 如果true,则启用 SWC 驱动项目的类型检查(当builder为时swc)。默认值为false

全局生成选项

这些属性指定命令使用的默认生成选项nest generate

名称 描述
spec 如果值为布尔值,则默认情况下true启用spec生成,值为 则false禁用生成。CLI 命令行上传递的标志会覆盖此设置,项目特定的generateOptions设置也会覆盖此设置(更多内容见下文)。如果该值是一个对象,则每个键代表一个原理图名称,并且布尔值确定是否为该特定原理图启用/禁用默认规范生成。
flat 如果为 true,则所有生成命令都将生成平面结构

本系列文章会持续更新哦,关注前端南玖,敬请期待吧~

【NestJS系列】从Nest CLI开始入门的更多相关文章

  1. nest cli bug

    nest cli bug Error: Collection "@nestjs/schematics" cannot be resolved. Error: Collection ...

  2. ABP(现代ASP.NET样板开发框架)系列之2、ABP入门教程

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...

  3. 基于DDD的现代ASP.NET开发框架--ABP系列之2、ABP入门教程

    基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boi ...

  4. sed修炼系列(一):花拳绣腿之入门篇

    本文为花拳绣腿招式入门篇,主要目的是入门,为看懂sed修炼系列(二):武功心法做准备.虽然是入门篇,只介绍了基本工作机制以及一些选项和命令,但其中仍然包括了很多sed的工作机制细节.对比网上各sed相 ...

  5. Netty 系列(三)Netty 入门

    Netty 系列(三)Netty 入门 Netty 是一个提供异步事件驱动的网络应用框架,用以快速开发高性能.高可靠性的网络服务器和客户端程序.更多请参考:Netty Github 和 Netty中文 ...

  6. Disruptor 系列(一)快速入门

    Disruptor 系列(一)快速入门 Disruptor:是一个开源的并发框架,能够在 无锁 的情况下实现网络的 Queue 并发操作,所以处理数据的能力比 Java 本身提供的并发类容器要大的多, ...

  7. Lucene7.2.1系列(一)快速入门

    系列文章: Lucene系列(一)快速入门 Lucene系列(二)luke使用及索引文档的基本操作 Lucene系列(三)查询及高亮 Lucene是什么? Lucene在维基百科的定义 Lucene是 ...

  8. Python学习系列(四)Python 入门语法规则2

    Python学习系列(四)Python 入门语法规则2 2017-4-3 09:18:04 编码和解码 Unicode.gbk,utf8之间的关系 2.对于py2.7, 如果utf8>gbk, ...

  9. C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介

    目录 为什么要刷LeetCode 刷LeetCode有哪些好处? LeetCode vs 传统的 OJ LeetCode刷题时的心态建设 C#如何刷遍LeetCode 选项1: VS本地Debug + ...

  10. Nest.js你学不会系列-初识Nest

    前言 最近在学习研究 Nest 框架,但是在学习过程中除了参考翻阅官方文档外国内几乎没有多少资料能系统的讲解 Nest 的相关内容,所以打算想通过我自己学习的角度讲解下 Nest 框架,不知道能坚持多 ...

随机推荐

  1. 使用“纯”Servlet做一个单表的CRUD操作

    使用"纯"Servlet做一个单表的CRUD操作 每博一文案 庄子说:"独往独来,是谓独有.独有之人,是谓至贵".热闹是别人的狂欢,而孤独是自己的自由. 相聚总 ...

  2. CRC(Cyclic Redundancy Check)

    CRC(循环冗余校验) [参考资料] https://en.wikipedia.org/wiki/Cyclic_redundancy_check https://wiki.segger.com/CRC ...

  3. cocos2d-x场景间参数传递

    1>使用全局变量     这个就不详细说明了.   2>切换时传递     2.1>在secondScene.h 中加入成员变量,如 int sceneNum;         并在 ...

  4. JavaScript基础语法-变量

    JavaScript JavaScript - 变量 1. 概念 变量是用于存放数据的容器 通过变量名可以获取数据 并且数据是可修改的 2. 使用 声明变量 只声明不赋值 直接调用 程序会输出unde ...

  5. 基于Canal实现MySQL 8.0 数据库数据同步

    前言 服务器说明 主机名称 操作系统 说明 192.168.11.82 Ubuntu 22.04 主库所在服务器 192.168.11.28 Oracle Linux Server 8.7 从库所在服 ...

  6. python轻量级性能工具-Locust

    Locust基于python的协程机制,打破了线程进程的限制,可以能够在一台测试机上跑高并发 性能测试基础 1.快慢:衡量系统的处理效率:响应时间 2.多少:衡量系统的处理能力:单位时间内能处理多少个 ...

  7. 关于在 springboot 中使用 @Autowired 注解来对 TemplateEngine 进行自动装配时,无法注入的问题。

    前言 本文是基于江南一点雨的 Spring Boot+Vue 系列视频教程第 三 章的第三节,详情参考Spring Boot+Vue系列视频教程 在观看学习这一节时,发现当进行手动渲染 Thymele ...

  8. 2022-01-29:连接词。 给你一个 不含重复 单词的字符串数组 words ,请你找出并返回 words 中的所有 连接词 。 连接词 定义为:一个完全由给定数组中的至少两个较短单词组成的字符串

    2022-01-29:连接词. 给你一个 不含重复 单词的字符串数组 words ,请你找出并返回 words 中的所有 连接词 . 连接词 定义为:一个完全由给定数组中的至少两个较短单词组成的字符串 ...

  9. Vue3.3 的新功能的一些体验

    Vue3 在大版本 3.3 里面推出来了一些新功能(主要是语法糖),网上有各种文章,但是看起来似乎是一样的. 我觉得吧,有新特性了,不能光看,还要动手尝试一下. DefineOptions 宏定义 先 ...

  10. SpringBoot限制接口访问频率 - 这些错误千万不能犯

    最近在基于SpringBoot做一个面向普通用户的系统,为了保证系统的稳定性,防止被恶意攻击,我想控制用户访问每个接口的频率.为了实现这个功能,可以设计一个annotation,然后借助AOP在调用方 ...