Skip to content

脚手架安装

✍️ w 🕒 2024-06-17 14:53:00(5 days ago) 🔗 B.NodeJS学习 服务端 nestjs
  1. 安装使用 Nest 提供的交手架进行安装使用,可以使用 npx 进行安装
bash
npx @nestjs/cli new 项目名
  1. 也可以将脚手架安装到全局后,执行交手架指令
bash
npm install -g @nestjs/cli

nest new 项目名

全局安装的问题是当前哪一刻的最新安装指令,如果 Nest 更新了需要执行更新全局脚手架

bash
npm update -g @nestjs/cli
  1. 项目创建后会让选择使用的安装包工具 ,也可以在使用指令的时候直接确定创建的 包管理工具
bash
npx @nestjs/cli new 项目名 -p  pnpm

bash
nest new 项目名 -p pnpm
  1. 也可以设置使用编写语言 --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)
  1. app.controller.spec.ts: 这是一个单元测试文件,通常使用 Jest 或其他测试框架来编写。这个文件包含了针对 app.controller.ts 文件中定义的控制器的测试用例。通过运行这些测试用例,可以验证控制器中的各个功能是否按照预期工作。

  2. app.controller.ts: 这是一个控制器文件,它负责处理特定路由的 HTTP 请求并返回响应。控制器是 NestJS 中的一个关键组件,它负责将传入的请求映射到合适的服务方法。通常,一个控制器类会包含多个路由处理方法,这些方法使用装饰器(如 @Get(), @Post() 等)来定义路由路径和请求方法。

  3. app.module.ts: 这是应用程序的根模块文件。模块是 NestJS 应用程序的基本构建块,每个模块都封装了一组相关的功能。根模块通常用 @Module() 装饰器来定义,包含控制器、服务和其他模块的注册。在 app.module.ts 中,通常会导入其他模块,声明控制器,并提供服务。

  4. app.service.ts: 这是一个服务文件,定义了核心业务逻辑和数据处理方法。服务类使用 @Injectable() 装饰器来标识,并且可以被注入到控制器或其他服务中。服务负责处理数据,并将结果返回给调用它的控制器方法。

  5. main.ts: 这是应用程序的入口文件。这个文件通常包含启动 NestJS 应用程序的代码。典型的 main.ts 文件会创建一个 Nest 应用实例,配置全局中间件,启动应用并监听指定端口。这个文件中的核心代码包括 NestFactory.create(AppModule) 以及 app.listen(port)

  • main.ts

    • 作用:引导应用,初始化并启动服务器。
    • 关系:引导 AppModule 作为根模块。
    ts
    import { 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

    • 作用:定义应用的根模块,组织控制器和提供者。
    • 关系:导入并注册 AppControllerAppService
    ts
    import { 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
    ts
    import { 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 通过依赖注入使用。
    ts
    import { 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]-cSchematics集合使用@nestjs/schematics
--strict-启用TypeScript的严格模式false
--help-h输出使用信息-

使用 npx nest -h 查看cli 的指令

名称别名说明使用示例
applicationapplication生成一个新的应用工作区nest new <project-name>nest new application <project-name>
classcl生成一个新的类nest generate class <class-name>nest g cl <class-name>
configurationconfig生成一个 CLI 配置文件nest generate configuration <file-name>nest g config <file-name>
controllerco生成一个控制器声明nest generate controller <controller-name>nest g co <controller-name>
decoratord生成一个自定义装饰器nest generate decorator <decorator-name>nest g d <decorator-name>
filterf生成一个过滤器声明nest generate filter <filter-name>nest g f <filter-name>
gatewayga生成一个网关声明nest generate gateway <gateway-name>nest g ga <gateway-name>
guardgu生成一个守卫声明nest generate guard <guard-name>nest g gu <guard-name>
interceptoritc生成一个拦截器声明nest generate interceptor <interceptor-name>nest g itc <interceptor-name>
interfaceitf生成一个接口nest generate interface <interface-name>nest g itf <interface-name>
librarylib在单体仓库中生成一个新的库nest generate library <library-name>nest g lib <library-name>
middlewaremi生成一个中间件声明nest generate middleware <middleware-name>nest g mi <middleware-name>
modulemo生成一个模块声明nest generate module <module-name>nest g mo <module-name>
pipepi生成一个管道声明nest generate pipe <pipe-name>nest g pi <pipe-name>
providerpr生成一个提供者声明nest generate provider <provider-name>nest g pr <provider-name>
resolverr生成一个 GraphQL 解析器声明nest generate resolver <resolver-name>nest g r <resolver-name>
resourceres生成一个新的 CRUD 资源nest generate resource <resource-name>nest g res <resource-name>
services生成一个服务声明nest generate service <service-name>nest g s <service-name>
sub-appapp在单体仓库中生成一个新的应用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 和依赖

Released under the MIT License.