NestJS系列(2):应用目录结构和脚手架命令介绍

简介: 在正式使用 NestJS 进行开发之前,先来了解下 Nest 应用的目录结构,和一些常用的脚本命令。

在正式使用 NestJS 进行开发之前,先来了解下 Nest 应用的目录结构,和一些常用的脚本命令。

工程目录

下面是使用 @nest/cli 创建的 Nest 项目的目录结构。

image-20230115144740250

上篇文章中介绍了 src 目录以及目录下各个文件的作用。下面是对其他目录和文件的说明:

目录/文件 说明
test 目录 存放测试文件
.eslintrc.js ESLint 的配置文件
.gitignore 用来配置不需要被 Git 追踪的文件
.prettierrc Prettier 的配置文件
nest-cli.json Nest 项目的配置文件
package.json 记录项目信息,比如依赖项,scripts 命令等
pnpm-lock.yaml 记录和锁定安装的依赖的版本信息
tsconfig.build.json TypeScript 语法构建时的配置文件
tsconfig.json TypeScript 编译器的配置文件,用于设置编译时的一些选项

scripts 命令介绍

打开 package.json 文件,@nest/cli 创建的项目提供了 12 个 scripts 命令,我们需要了解几个最常用的命令,如下:

 "scripts": {
    "build": "nest build",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
  },
  • build:打包适合生产环境的代码。
  • start:开发阶段启动 Nest 应用。使用该命令时,修改代码后需要手动重启服务。
  • start:dev:带有 watch 选项,也就是修改代码后会自动重启服务,所以在开发阶段一般使用此 script。
  • start:prod:它实际上是用 node 命令启动了一个构建产物的入口文件。
  • start:debug:它带了一个 debug 选项,用来做代码调试。

@nestjs/cli 常用命令介绍

@nestjs/cli 是 NestJS 官方提供的一个非常好用的脚手架工具。执行下面的命令,看下 @nestjs/cli 为开发者提供了哪些好用的命令。

nest --help

image-20230113173106756

  • nest new:创建 Nest 项目,已经体验过了。
  • nest build:构建应用,将源码打包为在生产环境使用的代码。
  • nest start:运行应用,在开发阶段使用。
  • nest generate:快速生成一个 Nest 元素。

nest generate

什么是 Mest 元素?前端使用 HTML 元素来构建页面,HTML 元素就是一个一个的标签。Nest 元素也是一样,构成一个 Nest 应用需要用到 Controller 控制器,Service 服务,Module 模块Filter 过滤器Pipe 管道等等,这些东西就是 Nest 的元素。

前一文章中分析 Hello,World 的示例代码,提到了模块,控制器和服务。至于剩下的其他 Nest 元素是什么,有什么含义和作用,会在后面的文章一一揭晓。

命令 nest generate | g 就可以用来生成这些 Nest 元素,它会给出一个模板,开发者就不用自己去手动建立这些基本结构了。

下面看一个示例。

生成用户模块

$ nest g module user
CREATE user/user.module.ts (81 bytes)
UPDATE app.module.ts (309 bytes)

会在 src 目录下创建一个 user 目录和 user.module.ts 模块文件:

image-20230116161619947

生成的用户模块的代码:

import { Module } from '@nestjs/common';
import { UserController } from './user.controller';

@Module({
  controllers: [UserController]
})
export class UserModule {}

在生成新的模块时,脚手架工具会自动帮助完成该模块的注册:

// app.module.ts 根模块

import { UserModule } from './user/user.module';

@Module({
  imports: [UserModule],
  controllers: [AppController],
  providers: [AppService],
})

export class AppModule {}

装饰器 @Module 有一个 imports 属性,用来接收其他模块。

生成用户控制器和服务

$ nest g controller user
CREATE user/user.controller.ts (97 bytes)
CREATE user/user.controller.spec.ts (478 bytes)
UPDATE user/user.module.ts (166 bytes)

$ nest g service user
CREATE user/user.service.spec.ts (446 bytes)
UPDATE user/user.module.ts (240 bytes)

会自动寻找 src/user 目录,并完成相关文件的创建。在生成控制器和服务时,会一并生成对应的测试文件。

image-20230116163115929

控制器的代码:

import { Controller } from '@nestjs/common';

@Controller('user')
export class UserController {}

服务的代码:

import { Injectable } from '@nestjs/common';

@Injectable()
export class UserService {}

总结

本文介绍了 Nest 应用的目录结构,重点介绍了几个常用的 scripts 命令,以及 @nest/cli 脚手架提供的 generate 命令,可以省去很多创建模板代码的时间。

感谢阅读,我们下篇文章见。

目录
相关文章
|
设计模式 前端开发 Java
DTO和VO的区别及使用场景详解
DTO和VO的区别及使用场景详解
7028 1
|
SDN 网络虚拟化 网络架构
在单交换机局域网中,不同网段的主机通信探秘🌐
在理解局域网中不同网段主机之间的通信之前,我们首先要明白网络的基本组成和工作原理。局域网(LAN)是一个封闭的网络环境,通常由交换机(Switch)作为核心设备连接网络中的各个主机。当我们谈论不同网段的主机时,实质上是在讨论它们配置的IP地址属于不同的IP地址范围。现在,**假设我们有两台主机(主机A和主机B),它们连接到同一个交换机,但配置在不同的网段上。问题来了:这两台主机能够直接通信吗**?🤔
在单交换机局域网中,不同网段的主机通信探秘🌐
|
机器学习/深度学习 Ruby
YOLOv5改进 | 2023注意力篇 | iRMB倒置残差块注意力机制(轻量化注意力机制)
YOLOv5改进 | 2023注意力篇 | iRMB倒置残差块注意力机制(轻量化注意力机制)
609 0
|
机器人
钉钉markdown
钉钉markdown
1281 0
|
11月前
|
JavaScript 前端开发 测试技术
拥抱开源:NestJS 在现代后端开发中的应用
【10月更文挑战第21天】NestJS 是一个基于 TypeScript 的现代 Node.js 框架,结合了 OOP、FP 和 FRP 元素,支持模块化设计、控制器、服务和守卫等核心概念,具备强大的依赖注入系统。本文探讨了 NestJS 的核心特性、应用场景及其在现代后端开发中的价值,包括构建 RESTful API、微服务、单页应用后端和企业级应用。通过最佳实践和社区支持,NestJS 可显著提高开发效率和代码质量。
vue3 element-ui-plus Carousel 跑马灯 的使用 及 踩坑记录
本文介绍了在Vue 3中使用Element UI Plus的Carousel组件实现跑马灯效果的方法,并分享了在实现过程中遇到的常见问题和解决方案。
vue3 element-ui-plus Carousel 跑马灯 的使用 及 踩坑记录
|
JavaScript 安全 前端开发
Node.js身份验证全攻略:策略与实践,打造坚不可摧的Web应用安全防线!
【8月更文挑战第22天】Node.js作为强大的服务器端JavaScript平台,对于构建高效网络应用至关重要。本文探讨其身份验证策略,涵盖从基于token至复杂的OAuth 2.0及JWT。Passport.js作为认证中间件,支持本地账号验证及第三方服务如Google、Facebook登录。同时介绍JWT轻量级验证机制,确保数据安全传输。开发者可根据应用需求选择合适方案,注重安全性以保护用户数据。
307 1
|
消息中间件 安全 Kafka
"深入实践Kafka多线程Consumer:案例分析、实现方式、优缺点及高效数据处理策略"
【8月更文挑战第10天】Apache Kafka是一款高性能的分布式流处理平台,以高吞吐量和可扩展性著称。为提升数据处理效率,常采用多线程消费Kafka数据。本文通过电商订单系统的案例,探讨了多线程Consumer的实现方法及其利弊,并提供示例代码。案例展示了如何通过并行处理加快订单数据的处理速度,确保数据正确性和顺序性的同时最大化资源利用。多线程Consumer有两种主要模式:每线程一个实例和单实例多worker线程。前者简单易行但资源消耗较大;后者虽能解耦消息获取与处理,却增加了系统复杂度。通过合理设计,多线程Consumer能够有效支持高并发数据处理需求。
411 4
|
存储 前端开发 JavaScript
Nestjs+Vue实现阿里云OSS服务端签名直传
阿里云 OSS 是常用的对象存储服务,借助其提供的 SDK,客户端(浏览器,小程序等)可以非常方便的将文件上传到 OSS 进行管理。
1397 0
Nestjs+Vue实现阿里云OSS服务端签名直传
|
存储 资源调度 前端开发
[Nestjs] 实现生成图形验证码以及校验过程
要在 NestJS 中实现图形验证码的校验过程,你可以按照以下步骤进行操作: 1. 安装依赖:首先,使用 npm 或 yarn 安装 svg-captcha 和 cookie-parser,其中 svg-captcha 是用于生成 SVG 格式的验证码图片的库,cookie-parser 是用于处理和解析 Cookie 的库。
797 0