Appearance
- 安装使用 Nest 提供的交手架进行安装使用,可以使用 npx 进行安装
bash
npx @nestjs/cli new 项目名
- 也可以将脚手架安装到全局后,执行交手架指令
bash
npm install -g @nestjs/cli
nest new 项目名
全局安装的问题是当前哪一刻的最新安装指令,如果 Nest 更新了需要执行更新全局脚手架
bash
npm update -g @nestjs/cli
- 项目创建后会让选择使用的安装包工具 ,也可以在使用指令的时候直接确定创建的 包管理工具
bash
npx @nestjs/cli new 项目名 -p pnpm
或
bash
nest new 项目名 -p pnpm
- 也可以设置使用编写语言
--language
可以指定 typescript 和 javascript
项目目录了解
项目创建后生成了项目目录
src
├── app.controller.spec.ts
├── app.controller.ts // 这是控制器文件,定义了应用程序的路由和处理请求的方法。控制器的责任是接收请求并返回响应。通常,它们会调用服务层的方法来处理业务逻辑。
├── app.module.ts // 这是应用程序的主模块文件,NestJS使用模块来组织应用结构。AppModule通常充当根模块,所有其他模块都会导入到它这里。它定义了应用中不同部分的依赖关系,比如控制器和服务。
├── app.service.ts // 这是服务文件,包含应用的业务逻辑。服务层主要用来处理数据操作,如与数据库交互、调用外部API等。它们通常被控制器调用以执行复杂的操作。
└── main.ts
文件名 | 解释 |
---|---|
app.controller.spec.ts | 这是一个单元测试文件,通常使用 Jest 或其他测试框架来编写,包含了针对 app.controller.ts 文件中定义的控制器的测试用例。通过运行这些测试用例,可以验证控制器中的各个功能是否按照预期工作。 |
app.controller.ts | 这是一个控制器文件,负责处理特定路由的 HTTP 请求并返回响应。控制器是 NestJS 中的一个关键组件,负责将传入的请求映射到合适的服务方法。通常,一个控制器类会包含多个路由处理方法,这些方法使用装饰器(如 @Get() , @Post() 等)来定义路由路径和请求方法。 |
app.module.ts | 这是应用程序的根模块文件。模块是 NestJS 应用程序的基本构建块,每个模块都封装了一组相关的功能。根模块通常用 @Module() 装饰器来定义,包含控制器、服务和其他模块的注册。在 app.module.ts 中,通常会导入其他模块,声明控制器,并提供服务。 |
app.service.ts | 这是一个服务文件,定义了核心业务逻辑和数据处理方法。服务类使用 @Injectable() 装饰器来标识,并且可以被注入到控制器或其他服务中。服务负责处理数据,并将结果返回给调用它的控制器方法。 |
main.ts | 这是应用程序的入口文件。这个文件通常包含启动 NestJS 应用程序的代码。典型的 main.ts 文件会创建一个 Nest 应用实例,配置全局中间件,启动应用并监听指定端口。这个文件中的核心代码包括 NestFactory.create(AppModule) 以及 app.listen(port) 。 |
app.controller.spec.ts: 这是一个单元测试文件,通常使用 Jest 或其他测试框架来编写。这个文件包含了针对
app.controller.ts
文件中定义的控制器的测试用例。通过运行这些测试用例,可以验证控制器中的各个功能是否按照预期工作。app.controller.ts: 这是一个控制器文件,它负责处理特定路由的 HTTP 请求并返回响应。控制器是 NestJS 中的一个关键组件,它负责将传入的请求映射到合适的服务方法。通常,一个控制器类会包含多个路由处理方法,这些方法使用装饰器(如
@Get()
,@Post()
等)来定义路由路径和请求方法。app.module.ts: 这是应用程序的根模块文件。模块是 NestJS 应用程序的基本构建块,每个模块都封装了一组相关的功能。根模块通常用
@Module()
装饰器来定义,包含控制器、服务和其他模块的注册。在app.module.ts
中,通常会导入其他模块,声明控制器,并提供服务。app.service.ts: 这是一个服务文件,定义了核心业务逻辑和数据处理方法。服务类使用
@Injectable()
装饰器来标识,并且可以被注入到控制器或其他服务中。服务负责处理数据,并将结果返回给调用它的控制器方法。main.ts: 这是应用程序的入口文件。这个文件通常包含启动 NestJS 应用程序的代码。典型的
main.ts
文件会创建一个 Nest 应用实例,配置全局中间件,启动应用并监听指定端口。这个文件中的核心代码包括NestFactory.create(AppModule)
以及app.listen(port)
。
main.ts
:- 作用:引导应用,初始化并启动服务器。
- 关系:引导
AppModule
作为根模块。
tsimport { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(3000); } bootstrap();
app.module.ts
:- 作用:定义应用的根模块,组织控制器和提供者。
- 关系:导入并注册
AppController
和AppService
。
tsimport { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; @Module({ imports: [], controllers: [AppController], providers: [AppService], }) export class AppModule {}
app.controller.ts
:- 作用:处理 HTTP 请求,定义路由和端点。
- 关系:通过构造函数注入
AppService
。
tsimport { Controller, Get } from '@nestjs/common'; import { AppService } from './app.service'; @Controller('hello') export class AppController { constructor(private readonly appService: AppService) {} @Get() getHello(): string { return this.appService.getHello(); } }
app.service.ts
:- 作用:定义业务逻辑,提供给控制器使用。
- 关系:被
AppController
通过依赖注入使用。
tsimport { Injectable } from '@nestjs/common'; @Injectable() export class AppService { getHello(): string { return 'Hello World!'; } }
nest 指令说明
创建指令
使用 nest new
的时候一些其他配置选项
选项 | 缩写 | 描述 | 默认值 |
---|---|---|---|
--directory [directory] | - | 指定目标目录 | - |
--dry-run | -d | 报告将执行的操作,但不实际写入结果 | false |
--skip-git | -g | 跳过git仓库初始化 | false |
--skip-install | -s | 跳过包安装 | false |
--package-manager [packageManager] | -p | 指定包管理器 | - |
--language [language] | -l | 编程语言(TypeScript或JavaScript) | TypeScript |
--collection [collectionName] | -c | Schematics集合使用 | @nestjs/schematics |
--strict | - | 启用TypeScript的严格模式 | false |
--help | -h | 输出使用信息 | - |
使用 npx nest -h
查看cli 的指令
名称 | 别名 | 说明 | 使用示例 |
---|---|---|---|
application | application | 生成一个新的应用工作区 | nest new <project-name> 或 nest new application <project-name> |
class | cl | 生成一个新的类 | nest generate class <class-name> 或 nest g cl <class-name> |
configuration | config | 生成一个 CLI 配置文件 | nest generate configuration <file-name> 或 nest g config <file-name> |
controller | co | 生成一个控制器声明 | nest generate controller <controller-name> 或 nest g co <controller-name> |
decorator | d | 生成一个自定义装饰器 | nest generate decorator <decorator-name> 或 nest g d <decorator-name> |
filter | f | 生成一个过滤器声明 | nest generate filter <filter-name> 或 nest g f <filter-name> |
gateway | ga | 生成一个网关声明 | nest generate gateway <gateway-name> 或 nest g ga <gateway-name> |
guard | gu | 生成一个守卫声明 | nest generate guard <guard-name> 或 nest g gu <guard-name> |
interceptor | itc | 生成一个拦截器声明 | nest generate interceptor <interceptor-name> 或 nest g itc <interceptor-name> |
interface | itf | 生成一个接口 | nest generate interface <interface-name> 或 nest g itf <interface-name> |
library | lib | 在单体仓库中生成一个新的库 | nest generate library <library-name> 或 nest g lib <library-name> |
middleware | mi | 生成一个中间件声明 | nest generate middleware <middleware-name> 或 nest g mi <middleware-name> |
module | mo | 生成一个模块声明 | nest generate module <module-name> 或 nest g mo <module-name> |
pipe | pi | 生成一个管道声明 | nest generate pipe <pipe-name> 或 nest g pi <pipe-name> |
provider | pr | 生成一个提供者声明 | nest generate provider <provider-name> 或 nest g pr <provider-name> |
resolver | r | 生成一个 GraphQL 解析器声明 | nest generate resolver <resolver-name> 或 nest g r <resolver-name> |
resource | res | 生成一个新的 CRUD 资源 | nest generate resource <resource-name> 或 nest g res <resource-name> |
service | s | 生成一个服务声明 | nest generate service <service-name> 或 nest g s <service-name> |
sub-app | app | 在单体仓库中生成一个新的应用 | nest generate application <app-name> 或 nest g app <app-name> |
例如可以使用 npx nest g res t
来生成一个包含 controller、service、module
的一个基本文件模板
打包指令
选项 | 说明 |
---|---|
-c, --config [path] | 指定 nest-cli 配置文件的路径。 |
-p, --path [path] | 指定 tsconfig 文件的路径。 |
-w, --watch | 以监视模式运行(实时重载)。 |
-b, --builder [name] | 指定要使用的构建器(tsc, webpack, swc)。 |
--watchAssets | 监视非 ts 文件(例如 .graphql)模式。 |
--webpack | 使用 webpack 进行编译(已弃用选项,请使用 --builder 代替)。 |
--type-check | 启用类型检查(当使用 SWC 时)。 |
--webpackPath [path] | 指定 webpack 配置文件的路径。 |
--tsc | 使用 TypeScript 编译器进行编译。 |
--preserveWatchOutput | 在使用 tsc 监视模式时使用 "preserveWatchOutput" 选项。 |
-h, --help | 输出使用信息。 |
nest-cli.json
进行一下脚手架的默认配置的文件
运行
选项 | 说明 |
---|---|
-c, --config [path] | 指定 nest-cli 配置文件的路径。 |
-p, --path [path] | 指定 tsconfig 文件的路径。 |
-w, --watch | 以监视模式运行(实时重载)。 |
-b, --builder [name] | 指定要使用的构建器(tsc, webpack, swc)。 |
--watchAssets | 监视非 ts 文件(例如 .graphql)模式。 |
-d, --debug [hostport] | 以调试模式运行(使用 --inspect 标志)。 |
--webpack | 使用 webpack 进行编译(已弃用选项,请使用 --builder 代替)。 |
--webpackPath [path] | 指定 webpack 配置文件的路径。 |
--type-check | 启用类型检查(当使用 SWC 时)。 |
--tsc | 使用 TypeScript 编译器进行编译。 |
--sourceRoot [sourceRoot] | 指向标准模式结构中单个项目源代码的根目录,或单体仓库模式结构中默认项目的根目录。 |
--entryFile [entryFile] | 指定命令将使用的入口文件路径。默认值为 Nest CLI 配置文件中定义的路径。 |
-e, --exec [binary] | 要运行的二进制文件(默认:"node")。 |
--preserveWatchOutput | 在使用 tsc 监视模式时使用 "preserveWatchOutput" 选项。 |
-h, --help | 输出使用信息。 |
nest start --watch
以监视模式运行(实时重载)
项目信息的 指令
nest info
命令,这个就是查看项目信息的,包括系统信息、 node、npm 和依赖