What is @nestjs/schematics?
The @nestjs/schematics package is a collection of schematics for NestJS, a framework for building efficient, reliable and scalable server-side applications. This package provides a set of tools to generate various parts of a NestJS application, such as modules, controllers, services, and more, following best practices and reducing the amount of boilerplate code that developers need to write.
What are @nestjs/schematics's main functionalities?
Generate a new application
This command sets up a new NestJS project with all the necessary configuration and dependencies.
nest new project-name
Generate a module
This command creates a new module in the NestJS application with the name 'users'.
nest generate module users
Generate a controller
This command generates a new controller with the name 'users' within the NestJS application, which can handle incoming HTTP requests.
nest generate controller users
Generate a service
This command creates a new service with the name 'users', which can contain business logic and can be injected into controllers or other services.
nest generate service users
Generate a guard
This command generates a new guard named 'auth', which can be used to implement authentication and authorization logic in the application.
nest generate guard auth
Generate a filter
This command creates a new exception filter named 'common', which can be used to handle exceptions in a consistent way across the application.
nest generate filter common
Generate an interceptor
This command generates a new interceptor named 'logging', which can be used to intercept incoming requests or outgoing responses for tasks like logging or transforming data.
nest generate interceptor logging
Generate a pipe
This command creates a new pipe named 'validation', which can be used to perform validation and data transformation on the request objects.
nest generate pipe validation
Generate a middleware
This command generates a new middleware named 'logger', which can be used to execute code before the route handler is called, such as logging request details.
nest generate middleware logger
Other packages similar to @nestjs/schematics
@angular/cli
Similar to @nestjs/schematics, the @angular/cli package is used for generating and scaffolding Angular applications. It provides a wide range of schematics for components, services, modules, and more. While @nestjs/schematics is focused on server-side applications with NestJS, @angular/cli is tailored for client-side Angular applications.
create-react-app
Create-react-app is a scaffolding tool for React applications. It sets up a new React project with sensible defaults. Unlike @nestjs/schematics, which provides fine-grained generation of individual elements, create-react-app is more about initializing a new project structure.
yeoman-generator
Yeoman is a generic scaffolding system that allows the creation of any kind of app. It has a variety of generators for different frameworks and libraries. While @nestjs/schematics is specific to NestJS, Yeoman is more versatile and can be extended with custom generators for different purposes.
slush
Slush is a scaffolding tool similar to Yeoman but built on top of Gulp.js. It allows developers to create their own scaffolding tools using Gulp tasks. Slush is more general-purpose compared to @nestjs/schematics, which is specialized for NestJS applications.
@nestjs/schematics
Nestjs project and architecture element generation based on @angular-dekit/schematics engine
Build :
git clone https://github.com/nestjs/schematics.git
Steps with Docker
in the schematics folder :
Steps without Docker
in the schematics folder :
npm install
rm -rf schematics && mkdir schematics
npm run -s build
cp -R src/* schematics
cp -R LICENSE package.json package-lock.json README.md .npmrc schematics
find src -name '*.js' -delete
Usages:
With @angular-devkit/schematics-cli
install @angular-devkit/schematics-cli globally.
run schematics [path_to_nestjs_schematics]:<nestjs_schematic_name> [...options]
Schematics:
application:
Option | description | required | default value |
---|
directory | The directory name to create the app in. | true | |
controller:
Option | description | required | default value |
---|
name | The name of the controller. | true | |
exception:
Option | description | required | default value |
---|
name | The name of the exception. | true | |
guard:
Option | description | required | default value |
---|
name | The name of the guard. | true | |
interceptor:
Option | description | required | default value |
---|
name | The name of the interceptor. | true | |
middleware:
Option | description | required | default value |
---|
name | The name of the middleware. | true | |
module:
Option | description | required | default value |
---|
name | The name of the module. | true | |
pipe:
Option | description | required | default value |
---|
name | The name of the pipe. | true | |
service:
Option | description | required | default value |
---|
name | The name of the service. | true | |