当前位置: 首页 > news >正文

nest generate从入门到实战

一、nest generate 是什么?

nest generate(简称 nest g)是 NestJS CLI 提供的代码生成器,用于快速创建 Nest 应用中的各类模块、控制器、服务、过滤器、管道等结构,极大提升开发效率。


二、核心命令与用法

命令示例说明
nest g module user生成模块(module)文件,自动注册到根模块中
nest g controller user --no-spec生成控制器(controller),--no-spec 跳过测试文件
nest g service user生成服务(service),自动注入到对应模块中
nest g resource user一键生成完整 REST API 模块:module + controller + service + CRUD
nest g filter xxx生成异常过滤器
nest g pipe xxx生成验证/转换管道
nest g guard xxx生成权限守卫
nest g interceptor xxx生成拦截器

三、目录结构与自动注入机制

以如下命令为例:

nest g module modules/user
nest g controller modules/user --no-spec
nest g service modules/user --no-spec

生成结构:

src/
└── modules/└── user/├── user.controller.ts├── user.service.ts└── user.module.ts

自动注入机制
生成的 UserModule 中会自动引入 UserControllerUserService,并在 AppModule 中自动导入 UserModule,无需手动配置。


四、高级用法:nest g resource

这是 NestJS 提供的最强生成命令,支持:

  • REST API
  • GraphQL
  • WebSocket
  • Microservice

示例:

nest g resource products

交互式选择:

  • Transport layer: REST
  • Generate CRUD entry points: Yes

结果:
自动生成完整的 RESTful CRUD 接口,包括 DTO、Entity、Controller、Service、Module,甚至带分页与验证。


五、底层原理:基于 Schematics 的模板引擎

NestJS CLI 的生成逻辑依赖于 @nestjs/schematics 包,它定义了各种模板(如 controller、service、module 等)的结构与生成规则。

  • 模板路径:@nestjs/schematics/src/**/files/
  • 支持自定义模板(通过 --collection 参数指定)
  • 可通过 .nestcli.json 配置默认行为

六、常见问题与排查

问题描述原因解决方案
isNullOrUndefined is not a function@nestjs/schematics 版本过低npm update @nestjs/schematics
生成文件未自动导入项目结构不符合 Nest 规范使用标准目录结构(如 src/ 下)
测试文件太多不需要测试--no-spec 参数

七、实战建议

场景推荐命令
快速开发 REST APInest g resource xxx
微服务模块nest g module xxx,手动配置 transport
权限模块nest g guard auth,结合守卫机制
统一异常处理nest g filter http-exception

八、总结一句话

nest generate 是 NestJS 的灵魂命令之一,它不仅是一个脚手架工具,更是 NestJS 模块化、解耦、IoC/DI 架构思想的落地体现。

如需进一步扩展,可自定义 schematics 模板,实现企业级代码生成规范。

http://www.dtcms.com/a/305888.html

相关文章:

  • 6.Origin2021如何绘制Y轴截断图?
  • Java 笔记 封装(Encapsulation)
  • 常见存储卡类型及对比
  • Elasticsearch 索引管理 API 实战:涵盖创建、查看、修改、删除及别名
  • 10 分钟上手 Elasticsearch 语义搜索(Serverless Cloud 本地双版本教程)
  • 在 Kubernetes 上部署 Label Studio
  • 汽车免拆诊断案例 | 免拆诊断发动机起动困难故障2例
  • Visual Studio Code 使用指南 (2025年版)
  • lesson28:Python单例模式全解析:从基础实现到企业级最佳实践
  • 【网络工程师软考版】路由协议 + ACL
  • 网络资源模板--基于Android Studio 实现的图书商城App
  • 如何不让android studio自动换行
  • UDP通讯和TCP通讯的区别-UDP(用户数据报协议)和 TCP(传输控制协议)
  • 第十七章 追新词
  • Python 闭包(Closure) 特性剖析
  • Linux ps -ef 命令解析
  • 三十二、【Linux网站服务器】搭建httpd服务器演示虚拟主机配置、网页重定向功能
  • STM32学习记录--Day3
  • ubuntu编译opendds
  • STM32CubeMX 生成时钟获取函数的分析
  • OmniParser:提升工作效率的视觉界面解析工具
  • react+ant design怎么样式穿透-tooltip怎么去掉箭头
  • 地下停车场照明节能:技术方案与价值重构
  • day7 替换数字那道题需要多写几次
  • 容器与虚拟机的本质差异:从资源隔离到网络存储机制
  • InfluxDB 3 数据库命名与创建全攻略:规范、限制与实战指南
  • Linux 进程管理与计划任务详解
  • 在 CentOS 系统上安装 Docker
  • ComfyUI自定义图片导出路径
  • SpringBoot 2.7.18 升级 3.4.6