购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 快速上手Nest CLI

相信CLI对于读者来说并不陌生,它广泛应用于各个工程化领域,用于快速创建项目、运行编译、执行构建等操作,如前端的Vue CLI、Vite、Create React App,后端的Spring Boot CLI、express-generator等。Nest也不例外,提供了强大的CLI命令行工具,它被放在@nestjs/cli包中。本节首先介绍CLI的安装并创建一个实际的项目,接着通过项目演示来介绍它生成各种代码片段的命令,帮助读者彻底掌握CLI的使用。

2.2.1 Nest CLI的安装

执行以下命令可将Nest CLI安装为全局工具,方便日后使用:

     npm install -g @Nestjs/cli

需要注意的是,这种方式需要不定时更新,以获取最新的模板代码:

     npm update -g @Nestjs/cli

安装完成之后,执行“nest –h”命令,结果如图2-1所示。

图2-1 “nest –h”命令的执行结果

由图2-1可见,Nest提供了非常丰富的命令。

● nest new:用于创建项目。

● nest build:用于构建生产环境代码。

● nest start:用于启动本地开发服务。

● nest info:用于查看当前项目中的Nest包信息。

● nest add:用于添加官方插件或者第三方模块。

● nest generate:用于生成各种模块代码,如Module、Controller、Service、Pipe、Middleware等。

同时,部分命令也支持别名,如“nest n”“nest i”“nest g”,后续将分别进行测试。

2.2.2 创建项目

用户可以用“nest new”命令来创建项目,具体参数如图2-2所示。

图2-2 创建项目时可以使用的参数选项

下面挑选几个常用的参数进行说明。

● --skip-git和--skip-install:这些参数用于跳过Git初始化和npm包安装步骤。

● --package-manager:此参数用于指定项目使用的包管理器(npm、yarn、pnpm)。推荐使用pnpm,它作为继npm、yarn之后推出的包管理器,因其速度快、节省磁盘空间而受到青睐。

● --language:此参数决定使用TypeScript还是JavaScript进行编写。推荐使用默认的TypeScript。

● --collection:用于指定工作流集合。默认是@nestjs/schematics,用于快速创建模块、控制器、服务等,与“nest generate”命令相关。通常使用默认值,后续将详细讲解。

● --strict:此参数用于指定TypeScript是否以严格模式运行。

运行“nest n cli-test”命令后,CLI提供了交互式命令让你选择包管理器,如图2-3所示。

图2-3 选择包管理器

当然,我们可以直接使用“nest n cli-test -p pnpm”命令来指定使用pnpm,如图2-4所示。

图2-4 指定pnpm

由图2-4可见,CLI直接创建默认的项目模板,然后执行安装依赖,完成后自动创建一个pnpm-lock.yaml文件,如图2-5所示。

图2-5 自动创建pnpm-lock.yaml文件

“nest generate”命令默认执行的是@nestjs/schematics包中的命令。而Schematics是一种用于创建、删除和更新Angular应用程序代码的工具。Nest在此基础上进行了扩展和定制,以适应其框架的需求。

2.2.3 生成指定的代码片段

执行“nest generate -h”命令来生成指定的代码片段,可以查看其中包含的内容,如图2-6所示。

图2-6 生成指定代码片段的命令参数

其中包含丰富的Nest元素(如Controller、Decorator、Filter等),同时提供了灵活的参数控制。

我们来试一下,进入刚刚创建的项目cli-test,执行“nest g controller”命令,如图2-7所示。

图2-7 使用命令生成控制器(controller)

接着可以看见在src目录下创建了一个user控制器,如图2-8所示。

图2-8 生成user控制器结果

其中,.spec.ts是单元测试文件,可以通过设置--no-spec参数表明不生成测试文件。

● --flat和--not-flat这两个参数表示是否使用扁平化结构。我们接着创建一个user过滤器来测试。

● --flat:参数表示扁平化,会将生成的文件放到src目录下,而不生成对应的目录,如图2-9所示。

图2-9 使用扁平化参数对应的执行结果

● --not-flat:参数表示非扁平化,会生成对应的目录,如图2-10所示。

图2-10 非扁平化参数执行结果

● --skip-import表示是否跳过自动导入依赖,默认情况下会自动导入,以user controller为例,如图2-11所示。

图2-11 默认自动导入依赖的效果图

由图2-11可见,UserController会自动导入应用的主模块中,并自动将其添加到Controllers依赖项列表中。同样的流程也适用于生成Service服务和module模块。

然而,逐个创建Controller或Filters可能不够方便。能否一次性生成所需的模板呢?当然可以。Nest提供了nest generate resource命令,可以一键生成代码模板。执行该命令后,CLI会询问我们选择使用哪种代码风格。我们选择REST风格的API,如图2-12所示。

图2-12 选择不同风格的API

选择yes后,系统将自动生成与CRUD(创建、读取、更新、删除)相关的代码,如图2-13所示。

图2-13 选择CRUD入口节点

创建完成后,生成REST风格的API,内容如下:

     import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
     import { PersonService } from './person.service';
     import { CreatePersonDto } from './dto/create-person.dto';
     import { UpdatePersonDto } from './dto/update-person.dto';

     @Controller('person')

     export class PersonController {
       constructor(private readonly personService: PersonService) {}

       @Post()
       create(@Body() createPersonDto: CreatePersonDto) {
         return this.personService.create(createPersonDto);
       } 

       @Get()
       findAll() {
         return this.personService.findAll();
       } 

       @Get(':id')
       findOne(@Param('id') id: string) {
         return this.personService.findOne(+id);
       } 

       @Patch(':id')
       update(@Param('id') id: string, @Body() updatePersonDto: UpdatePersonDto) {
         return this.personService.update(+id, updatePersonDto);
       } 

       @Delete(':id')
       remove(@Param('id') id: string) {
         return this.personService.remove(+id);
       } 
     } 

dto和entities是CRUD相关的代码,最终集成到PersonModule中,并被自动导入AppModule,如图2-14所示。

图2-14 CRUD代码展示

以上就是Nest CLI提供的用于快速创建项目代码的工具。

2.2.4 构建应用

前面介绍了nest generate命令,接下来使用new build命令来构建应用。

执行nest build –h命令,可以看到build命令提供了一些可选参数,如图2-15所示。

图2-15 build命令提供的参数

其中,各选项说明如下。

● --path:用于指定tsconfig文件的路径。

● --watch:开启实时监听模式,在文件发生变化时自动执行构建操作。

● --builder:选择使用指定的工具进行构建,可选的工具包括tsc、webpack、swc等。

默认情况下,Nest使用tsc进行编译,运行nest build命令的效果如图2-16所示。

若要切换为使用webpack进行打包,可以运行nest build-b webpack命令,效果如图2-17所示。

图2-16 构建之后的目录文件

图2-17 webpack打包后的目录文件

--webpack和--tsc分别指定了不同的编译器,webpack用于编译和打包,而tsc只用于编译,它们的运行效果与前文介绍的类似。

每次都需要在命令后面添加参数,这样有点麻烦,是否可以将这些参数写入配置文件中进行管理呢?答案是可以的。

● --config:指定nest-cli的配置文件路径,即nest-cli.json文件,可以用来配置打包参数,如图2-18所示。

图2-18 nest-cli的配置文件

由图2-18可以看到,前面提到的flat、spec都可以在这里进行配置。通过编译选项也可以指定是否使用webpack进行构建,以及是否使用builder指定选择的编译器等。

2.2.5 启动开发调试

本小节将用nest start命令来启动开发调试,它的可选参数如图2-19所示。

图2-19 start命令提供的参数

在开发阶段,nest start命令用于开启本地服务。运行该命令的结果如图2-20所示。

图2-20 nest start运行结果

--debug参数用来调试。运行nest start–d命令后会启动一个WebSocket调试服务,通过调试工具链接到这个端口即可进行调试,如图2-21所示。

图2-21 带--debug参数运行nest命令的运行结果

详细的调试内容及技巧将在2.6节介绍。其他配置与build命令类似,这里不再赘述。

2.2.6 查看项目信息

nest info命令用于查看Node.js、npm以及Nest依赖包的相关版本信息,如图2-22所示。

图2-22 nest info命令的执行结果 Y7G/kBy7Bd9FB6551JTx229bf4rJZMakQqo6wSv9SVolluinZyjEodFdOY36F6Hs

点击中间区域
呼出菜单
上一章
目录
下一章
×