0
# Code Generation
1
2
Generate NestJS components, services, controllers, and other architectural elements using Angular DevKit schematics. The CLI provides built-in support for the @nestjs/schematics collection with comprehensive code generation capabilities.
3
4
## Capabilities
5
6
### Generate Command
7
8
Creates NestJS elements using schematics with extensive customization options.
9
10
```bash { .api }
11
# Generate elements
12
nest generate <schematic> [name] [path] [options]
13
nest g <schematic> [name] [path] [options]
14
15
# Options:
16
-d, --dry-run # Report actions without writing results
17
-p, --project [project] # Project in which to generate files
18
--flat # Enforce flat structure of generated element
19
--no-flat # Enforce that directories are generated
20
--spec # Enforce spec files generation (default: true)
21
--spec-file-suffix [suffix] # Use custom suffix for spec files
22
--skip-import # Skip importing (default: false)
23
--no-spec # Disable spec files generation
24
-c, --collection [collectionName] # Schematics collection to use
25
```
26
27
**Usage Examples:**
28
29
```bash
30
# Generate a controller
31
nest generate controller users
32
nest g controller users
33
34
# Generate in specific path
35
nest g controller users --path=modules/users
36
37
# Generate without spec files
38
nest g controller users --no-spec
39
40
# Generate with flat structure
41
nest g service users --flat
42
43
# Generate in specific project (monorepo)
44
nest g controller users --project=api
45
46
# Dry run to preview changes
47
nest g controller users --dry-run
48
49
# Generate with custom collection
50
nest g controller users --collection=@my/schematics
51
```
52
53
## Available Schematics
54
55
The @nestjs/schematics collection provides the following generators:
56
57
### Core Elements
58
59
```bash { .api }
60
# Application
61
nest g application <name> # Generate a new application (for monorepos)
62
nest g app <name> # Alias for application
63
64
# Library
65
nest g library <name> # Generate a new library (for monorepos)
66
nest g lib <name> # Alias for library
67
```
68
69
### Controllers and Services
70
71
```bash { .api }
72
# Controller
73
nest g controller <name> # Generate a controller class
74
nest g co <name> # Alias for controller
75
76
# Service
77
nest g service <name> # Generate a service class
78
nest g s <name> # Alias for service
79
80
# Provider
81
nest g provider <name> # Generate a provider class
82
nest g pr <name> # Alias for provider
83
```
84
85
### Modules and Structure
86
87
```bash { .api }
88
# Module
89
nest g module <name> # Generate a module class
90
nest g mo <name> # Alias for module
91
92
# Resource (full CRUD)
93
nest g resource <name> # Generate complete CRUD resource
94
nest g res <name> # Alias for resource
95
```
96
97
### Advanced Elements
98
99
```bash { .api }
100
# Middleware
101
nest g middleware <name> # Generate middleware class
102
nest g mi <name> # Alias for middleware
103
104
# Guard
105
nest g guard <name> # Generate guard class
106
nest g gu <name> # Alias for guard
107
108
# Interceptor
109
nest g interceptor <name> # Generate interceptor class
110
nest g in <name> # Alias for interceptor
111
112
# Decorator
113
nest g decorator <name> # Generate decorator function
114
nest g d <name> # Alias for decorator
115
116
# Pipe
117
nest g pipe <name> # Generate pipe class
118
nest g pi <name> # Alias for pipe
119
120
# Filter
121
nest g filter <name> # Generate exception filter class
122
nest g f <name> # Alias for filter
123
```
124
125
### Gateways and Resolvers
126
127
```bash { .api }
128
# Gateway (WebSockets)
129
nest g gateway <name> # Generate WebSocket gateway
130
nest g ga <name> # Alias for gateway
131
132
# Resolver (GraphQL)
133
nest g resolver <name> # Generate GraphQL resolver
134
nest g r <name> # Alias for resolver
135
```
136
137
### Configuration Files
138
139
```bash { .api }
140
# Class
141
nest g class <name> # Generate a basic class
142
nest g cl <name> # Alias for class
143
144
# Interface
145
nest g interface <name> # Generate an interface
146
nest g interface <name> # No alias available
147
```
148
149
## File Generation Patterns
150
151
### Spec Files
152
153
By default, the CLI generates test specification files alongside components:
154
155
```bash
156
# Generates both controller and spec file:
157
nest g controller users
158
# Creates:
159
# - users.controller.ts
160
# - users.controller.spec.ts
161
```
162
163
### Import Handling
164
165
The CLI automatically handles imports and module registration:
166
167
```bash
168
# When generating a controller, it:
169
# 1. Creates the controller file
170
# 2. Updates the parent module to import the controller
171
# 3. Adds the controller to the module's controllers array
172
```
173
174
### Directory Structure
175
176
```bash { .api }
177
# Flat structure (--flat)
178
src/
179
├── users.controller.ts
180
└── users.controller.spec.ts
181
182
# Nested structure (default)
183
src/
184
└── users/
185
├── users.controller.ts
186
└── users.controller.spec.ts
187
```
188
189
## Project Structure Options
190
191
### Monorepo Support
192
193
For monorepo projects, specify the target project:
194
195
```bash { .api }
196
# Generate in specific app/library
197
nest g controller users --project=api-gateway
198
nest g service users --project=shared-lib
199
```
200
201
### Path Specification
202
203
Control exactly where files are generated:
204
205
```bash { .api }
206
# Generate in custom path
207
nest g controller users --path=src/modules/authentication
208
nest g service email --path=src/common/services
209
```
210
211
## Advanced Options
212
213
### Custom File Suffixes
214
215
Customize the suffix used for spec files:
216
217
```bash { .api }
218
# Use custom spec file suffix
219
nest g controller users --spec-file-suffix=test
220
# Creates: users.controller.test.ts instead of users.controller.spec.ts
221
```
222
223
### Skip Import Registration
224
225
Prevent automatic module registration:
226
227
```bash { .api }
228
# Generate without adding to module
229
nest g controller users --skip-import
230
```
231
232
## Resource Generation
233
234
The resource schematic generates a complete CRUD setup:
235
236
```bash { .api }
237
# Generate complete resource
238
nest g resource users
239
240
# Creates:
241
# - users.controller.ts
242
# - users.controller.spec.ts
243
# - users.service.ts
244
# - users.service.spec.ts
245
# - users.module.ts
246
# - dto/create-user.dto.ts
247
# - dto/update-user.dto.ts
248
# - entities/user.entity.ts
249
```
250
251
## Error Handling
252
253
The CLI validates schematic names and provides helpful error messages:
254
255
```bash
256
# Invalid schematic name
257
nest g invalid-schematic users
258
# Lists available schematics in a formatted table
259
```