Die Einrichtung einer funktionsfähigen NestJS-Entwicklungsumgebung erfordert das Verständnis und die korrekte Installation verschiedener Tools und Abhängigkeiten. Dieses Kapitel führt Sie durch den kompletten Setup-Prozess und stellt Ihnen die wichtigsten Werkzeuge vor, die Sie für die professionelle NestJS-Entwicklung benötigen.

Node.js bildet das Fundament jeder NestJS-Anwendung und muss als erstes installiert werden. Die Wahl der richtigen Node.js-Version und Installationsmethode ist entscheidend für eine reibungslose Entwicklungserfahrung.
NestJS unterstützt mehrere Node.js-Versionen, aber nicht alle bieten die gleiche Stabilität und Performance:
Node.js 20.x LTS (Iron) ist die empfohlene Version für Produktionsumgebungen. Diese Version bietet ausgezeichnete Stabilität, Long Term Support bis April 2026 und optimale Kompatibilität mit dem gesamten NestJS-Ecosystem. Die LTS-Version erhält regelmäßige Sicherheitsupdates und Bugfixes.
Node.js 22.x (Current) kann für Entwicklungsumgebungen verwendet werden, wenn Sie die neuesten JavaScript-Features nutzen möchten. Diese Version bringt Verbesserungen in der V8-Engine und experimentelle Features mit sich, ist aber noch nicht für kritische Produktionsanwendungen empfohlen.
Minimale Anforderungen: NestJS erfordert mindestens Node.js 16.x, aber diese Versionen sind nicht mehr für neue Projekte empfohlen, da der Support ausgelaufen ist.
Die direkteste Methode ist der Download vom offiziellen Node.js-Repository:
# Für Windows: Download von nodejs.org
# Für macOS: Download von nodejs.org oder via Homebrew
brew install node@20
# Für Ubuntu/Debian
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
# Für CentOS/RHEL/Fedora
curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
sudo dnf install nodejs npmNVM ermöglicht es, mehrere Node.js-Versionen parallel zu verwalten und ist besonders für Entwickler nützlich, die an verschiedenen Projekten arbeiten:
# NVM Installation (Linux/macOS)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# Terminal neu starten oder source ausführen
source ~/.bashrc
# Verfügbare Node.js-Versionen anzeigen
nvm list-remote
# Node.js 20 LTS installieren
nvm install 20
nvm use 20
nvm alias default 20
# Für spezifische Projekte
echo "20" > .nvmrc # Im Projektverzeichnis
nvm use # Verwendet automatisch die Version aus .nvmrcFür Windows-Benutzer steht nvm-windows zur Verfügung:
# Als Administrator ausführen
choco install nvm
# oder Download von GitHub releases
nvm install 20.11.0
nvm use 20.11.0Volta ist eine moderne Alternative zu NVM mit verbesserter Performance:
# Volta Installation
curl https://get.volta.sh | bash
# Node.js installieren
volta install node@20Nach der Installation sollten Sie die erfolgreiche Einrichtung überprüfen:
# Node.js-Version prüfen
node --version
# Erwartete Ausgabe: v20.x.x
# NPM-Version prüfen
npm --version
# Erwartete Ausgabe: 10.x.x oder höher
# Verfügbare NPM-Registry prüfen
npm config get registry
# Erwartete Ausgabe: https://registry.npmjs.org/
# Node.js-Installation testen
node -e "console.log('Node.js ist korrekt installiert!')"Eine korrekte NPM-Konfiguration verbessert die Entwicklungserfahrung erheblich:
# Globales Installationsverzeichnis festlegen (optional)
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
# Cache-Verzeichnis optimieren
npm config set cache ~/.npm-cache
# Package-Lock-Verhalten konfigurieren
npm config set package-lock true
npm config set save-exact true
# Registry-Performance verbessern
npm config set fetch-retries 5
npm config set fetch-retry-mintimeout 20000
# Optional: NPM-Audit automatisch ausführen
npm config set audit-level moderateDie NestJS CLI ist das zentrale Werkzeug für die Erstellung, Entwicklung und Verwaltung von NestJS-Anwendungen. Sie automatisiert viele wiederkehrende Aufgaben und stellt sicher, dass Best Practices eingehalten werden.
Die CLI sollte global installiert werden, um von überall im System zugänglich zu sein:
# Standard-Installation mit NPM
npm install -g @nestjs/cli
# Alternative mit Yarn
yarn global add @nestjs/cli
# Alternative mit PNPM
pnpm add -g @nestjs/cli
# Installation verifikziieren
nest --version
# Erwartete Ausgabe: 10.x.x oder höher
# Verfügbare Befehle anzeigen
nest --helpDie CLI sollte regelmäßig aktualisiert werden, um die neuesten Features und Bugfixes zu erhalten:
# Aktuelle Version prüfen
nest info
# CLI aktualisieren
npm update -g @nestjs/cli
# Spezifische Version installieren
npm install -g @nestjs/cli@10.3.0
# Mehrere CLI-Versionen mit NPX verwenden
npx @nestjs/cli@latest new my-project
npx @nestjs/cli@9.5.0 generate service legacy-serviceFür Teamumgebungen kann eine lokale CLI-Installation in jedem Projekt sinnvoll sein:
# In package.json als devDependency
npm install --save-dev @nestjs/cli
# Verwendung über NPX oder Scripts
npx nest generate controller users
# oder über package.json scripts:
# "scripts": {
# "nest": "nest"
# }
npm run nest generate service authNach der CLI-Installation können Sie Ihr erstes NestJS-Projekt erstellen:
# Neues Projekt erstellen
nest new my-first-nestjs-app
# Interaktive Optionen:
# Package manager: npm/yarn/pnpm
# Git repository: yes/no
# Strict TypeScript: yes/no
# Mit spezifischen Optionen
nest new my-app --package-manager=npm --skip-git --strict
# Projekt-Template verwenden
nest new my-microservice --collection=@nestjs/microservicesDie NestJS CLI bietet eine Vielzahl von Befehlen, die den Entwicklungsprozess erheblich beschleunigen. Diese Befehle folgen konsistenten Mustern und generieren Code, der den NestJS-Best-Practices entspricht.
Neue Anwendung erstellen:
# Standard-Anwendung
nest new project-name
# Mit erweiterten Optionen
nest new project-name \
--package-manager=yarn \
--language=typescript \
--strict=true \
--skip-git=false
# Monorepo-Struktur
nest new my-workspace --package-manager=npm
cd my-workspace
nest generate app api
nest generate app workerInformationen über das Projekt:
# Projekt- und System-Informationen
nest info
# Ausgabe enthält:
# - NestJS CLI Version
# - Node.js Version
# - Betriebssystem
# - NPM Version
# - Installierte NestJS-PackagesController generieren:
# Einfacher Controller
nest generate controller users
# oder kurz:
nest g co users
# Controller mit CRUD-Operationen
nest g resource posts
# Generiert: Controller, Service, Module, DTOs, Entity
# Controller in spezifischem Modul
nest g co users --path=modules/usersServices und Provider:
# Service generieren
nest g service auth
nest g s auth # Kurzform
# Mit Interface
nest g service users --spec=false
nest g interface users --path=interfaces
# Provider mit Factory
nest g provider config --type=factoryModule und Organisation:
# Neues Modul
nest g module products
# Feature-Modul mit allem
nest g resource orders
# Erstellt: module, controller, service, dto, entity
# Geteiltes Modul
nest g module shared
nest g service shared/logger --path=sharedSpezielle Komponenten:
# Guards
nest g guard auth
nest g gu roles # Kurzform
# Interceptors
nest g interceptor logging
nest g in transform
# Pipes
nest g pipe validation
nest g pi transform
# Middleware
nest g middleware logger
nest g mi cors
# Exception Filters
nest g filter http-exception
nest g f all-exceptions
# Decorators
nest g decorator current-user
nest g d api-key# Development-Server starten
nest start
# Mit Watch-Mode (automatischer Neustart)
nest start --watch
nest start --debug --watch # Mit Debugging
# Production Build
nest build
nest build --watch # Build mit Watch-Mode
# Testing
nest test
nest test --watch
nest test --coverageDie NestJS CLI bietet weit mehr als nur Code-Generierung. Sie ist ein umfassendes Entwicklungswerkzeug mit erweiterten Funktionen für professionelle Entwicklung.
Die CLI basiert auf Angular Schematics und ermöglicht anpassbare Code-Generierung:
Verfügbare Schematics anzeigen:
# Alle verfügbaren Schematics
nest g --help
# Collection-spezifische Schematics
nest g --collection=@nestjs/swagger --helpCustom Schematics verwenden:
# Externe Schematic Collections
npm install -g @nestjs/swagger
nest g --collection=@nestjs/swagger swagger-config
# Eigene Schematics
nest g --collection=./my-schematics my-componentDie CLI ermöglicht die Anpassung von Templates für konsistente Code-Generierung:
# Template-Verzeichnis erstellen
mkdir .nest-cli-templates
# Custom Template für Controller
cat > .nest-cli-templates/controller.template << EOF
import { Controller, Get } from '@nestjs/common';
@Controller('__name__')
export class __ClassName__Controller {
@Get()
findAll() {
return 'This action returns all __name__';
}
}
EOFFür größere Projekte unterstützt die CLI Monorepo-Strukturen:
# Workspace erstellen
nest new my-workspace
# Apps hinzufügen
nest generate app api
nest generate app admin-panel
nest generate app worker
# Libraries erstellen
nest generate library shared
nest generate library auth-lib
# Build spezifische App
nest build api
nest build admin-panel
# Alle Apps builden
nest build --allWorkspace-Konfiguration (nest-cli.json):
{
"$schema": "https://raw.githubusercontent.com/nestjs/schematics/master/src/collection.json",
"collection": "@nestjs/schematics",
"sourceRoot": "apps/api/src",
"monorepo": true,
"root": "apps/api",
"projects": {
"api": {
"type": "application",
"root": "apps/api",
"entryFile": "main",
"sourceRoot": "apps/api/src",
"compilerOptions": {
"tsConfigPath": "apps/api/tsconfig.app.json"
}
},
"shared": {
"type": "library",
"root": "libs/shared",
"entryFile": "index",
"sourceRoot": "libs/shared/src",
"compilerOptions": {
"tsConfigPath": "libs/shared/tsconfig.lib.json"
}
}
}
}Webpack-Integration:
# Mit Webpack bundeln
nest build --webpack
# Bundle-Analyzer
nest build --webpack --bundle-analyzer
# Source Maps generieren
nest build --source-mapTypeScript-Compiler-Optionen:
# Strenge Typisierung
nest build --type-check
# Incremental Build
nest build --incremental
# Watch-Mode mit optimierter Performance
nest start --watch --preserve-watch-outputIn der täglichen Entwicklung mit NestJS gibt es bestimmte CLI-Befehle, die besonders häufig verwendet werden. Diese Befehle sind essentiell für einen effizienten Workflow.
Projekt-Setup und Start:
# Schneller Projekt-Start
nest new my-api && cd my-api && npm run start:dev
# Entwicklungsserver mit erweiterten Optionen
nest start --debug --watch --preserve-watch-output
# Production-ähnliche Umgebung
NODE_ENV=production nest startFeature-Entwicklung:
# Vollständiges Feature erstellen
nest g resource users --no-spec
# Erstellt: module, controller, service, dto
# API mit Swagger-Integration
nest g resource products
npm install @nestjs/swagger swagger-ui-express
# Swagger-Setup in main.ts hinzufügenTesting-Workflow:
# Unit Tests
nest test users.service.spec.ts --watch
# E2E Tests
npm run test:e2e
# Test Coverage
npm run test:covModulare Architektur:
# Core-Module erstellen
nest g module core
nest g service core/config --no-spec
nest g service core/logger --no-spec
# Feature-Module
nest g module features/auth
nest g service features/auth/auth --no-spec
nest g controller features/auth/auth --no-spec
nest g guard features/auth/jwt-auth --no-specShared Resources:
# Gemeinsame Utilities
nest g module shared
nest g service shared/utils --no-spec
nest g interface shared/interfaces/api-response
nest g decorator shared/decorators/current-user --no-specTypeORM Setup:
# TypeORM-spezifische Generierung
nest g module database
nest g service database/database --no-spec
# Entity-Module
nest g module entities/user
nest g class entities/user/user.entity --no-specPrisma Integration:
# Prisma Service
nest g service prisma --no-spec
nest g module prisma
# Repository Pattern mit Prisma
nest g service repositories/user-repository --no-specREST API Pattern:
# RESTful Controller mit DTOs
nest g resource api/v1/users --no-spec
# Struktur:
# - users.controller.ts
# - users.service.ts
# - users.module.ts
# - dto/create-user.dto.ts
# - dto/update-user.dto.ts
# - entities/user.entity.tsMicroservices Pattern:
# Microservice Controller
nest g controller microservices/user-microservice --no-spec
nest g service microservices/user-microservice --no-spec
# Message Patterns
nest g interface microservices/patterns/user-patterns# Exception Filters
nest g filter filters/http-exception --no-spec
nest g filter filters/all-exceptions --no-spec
# Validation Pipes
nest g pipe pipes/validation --no-spec
nest g pipe pipes/parse-int --no-spec
# Custom Decorators für Validation
nest g decorator decorators/is-strong-password --no-specDie NestJS CLI ist hochgradig anpassbar und kann an die spezifischen Bedürfnisse Ihres Teams und Projekts angepasst werden.
Die nest-cli.json-Datei steuert das Verhalten der
CLI:
{
"$schema": "https://raw.githubusercontent.com/nestjs/schematics/master/src/collection.json",
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"entryFile": "main",
"language": "ts",
"generateOptions": {
"spec": false,
"flat": false
},
"compilerOptions": {
"deleteOutDir": true,
"builder": "webpack",
"typeCheck": true,
"assets": [
"**/*.md",
"**/*.json"
],
"watchAssets": true
},
"projects": {}
}Wichtige Konfigurationsoptionen:
generateOptions.spec: Automatische
Test-Datei-GenerierunggenerateOptions.flat: Flache VerzeichnisstrukturcompilerOptions.builder: Build-System
(webpack/tsc)compilerOptions.typeCheck:
TypeScript-Type-CheckingcompilerOptions.assets: Zusätzliche Dateien für
BuildSie können eigene Schematics für wiederkehrende Patterns erstellen:
Schematic Collection erstellen:
# Schematics CLI installieren
npm install -g @angular-devkit/schematics-cli
# Neue Collection
schematics blank my-nestjs-schematics
cd my-nestjs-schematics
# Custom Schematic hinzufügen
schematics blank feature-moduleBeispiel: Feature Module Schematic:
// src/feature-module/index.ts
import {
Rule,
SchematicContext,
Tree,
apply,
mergeWith,
template,
url,
strings,
} from '@angular-devkit/schematics';
interface Options {
name: string;
path?: string;
}
export function featureModule(options: Options): Rule {
return (tree: Tree, context: SchematicContext) => {
const templateSource = apply(url('./files'), [
template({
...strings,
...options,
}),
]);
return mergeWith(templateSource);
};
}Package.json Scripts anpassen:
{
"scripts": {
"nest": "nest",
"generate:resource": "nest g resource",
"generate:module": "nest g module",
"dev": "nest start --debug --watch",
"build:prod": "nest build --webpack",
"test:unit": "jest --testPathPattern=spec.ts",
"test:e2e": "jest --config ./test/jest-e2e.json",
"lint:fix": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix"
}
}Alias-Befehle definieren:
# In .bashrc oder .zshrc
alias ndev="nest start --debug --watch"
alias ngen="nest generate"
alias nres="nest generate resource"
alias nmod="nest generate module"
alias nsrv="nest generate service"
alias ncon="nest generate controller"VS Code Tasks (.vscode/tasks.json):
{
"version": "2.0.0",
"tasks": [
{
"label": "NestJS: Start Development",
"type": "shell",
"command": "npm",
"args": ["run", "start:dev"],
"group": "build",
"presentation": {
"echo": true,
"reveal": "always",
"panel": "new"
}
},
{
"label": "NestJS: Generate Resource",
"type": "shell",
"command": "nest",
"args": ["generate", "resource", "${input:resourceName}"],
"group": "build"
}
],
"inputs": [
{
"id": "resourceName",
"description": "Resource name",
"default": "users",
"type": "promptString"
}
]
}Verschiedene Build-Konfigurationen:
// nest-cli.json
{
"compilerOptions": {
"builder": "webpack",
"typeCheck": true
},
"generateOptions": {
"spec": {
"environment": "development"
}
}
}Docker-Integration:
# Dockerfile.dev
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["npm", "run", "start:dev"]# Docker-compose für Entwicklung
version: '3.8'
services:
nestjs-app:
build:
context: .
dockerfile: Dockerfile.dev
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modules
environment:
- NODE_ENV=developmentDie Anpassung der NestJS CLI an Ihre spezifischen Bedürfnisse erhöht die Entwicklungseffizienz erheblich und stellt sicher, dass alle Teammitglieder konsistent arbeiten. Durch die Kombination von konfigurierbaren Optionen, Custom Schematics und IDE-Integration können Sie einen optimalen Entwicklungsworkflow schaffen, der die Stärken von NestJS voll ausschöpft.