5 Tool Chain und Installation

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.

5.1 Node.js installieren

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.

5.1.1 Empfohlene Node.js-Versionen für NestJS (2025)

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.

5.1.2 Installationsmethoden

5.1.2.1 Offizielle Node.js-Installation

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 npm

5.1.2.2 Node Version Manager (NVM) - Empfohlener Ansatz

NVM 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 .nvmrc

Fü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.0

5.1.2.3 Alternative Package Manager

Volta ist eine moderne Alternative zu NVM mit verbesserter Performance:

# Volta Installation
curl https://get.volta.sh | bash

# Node.js installieren
volta install node@20

5.1.3 Verifikation der Installation

Nach 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!')"

5.1.4 NPM-Konfiguration optimieren

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 moderate

5.2 NestJS CLI installieren

Die 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.

5.2.1 Globale Installation

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 --help

5.2.2 CLI-Update und Versionsverwaltung

Die 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-service

5.2.3 Lokale CLI-Installation für Teams

Fü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 auth

5.2.4 Erste Projektinitialisierung

Nach 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/microservices

5.3 Nützliche CLI-Befehle für NestJS

Die 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.

5.3.1 Projektstruktur-Befehle

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 worker

Informationen über das Projekt:

# Projekt- und System-Informationen
nest info

# Ausgabe enthält:
# - NestJS CLI Version
# - Node.js Version  
# - Betriebssystem
# - NPM Version
# - Installierte NestJS-Packages

5.3.2 Code-Generierungs-Befehle

Controller 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/users

Services 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=factory

Module 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=shared

Spezielle 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

5.3.3 Entwicklungsserver-Befehle

# 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 --coverage

5.4 Kernfunktionen der NestJS-CLI

Die NestJS CLI bietet weit mehr als nur Code-Generierung. Sie ist ein umfassendes Entwicklungswerkzeug mit erweiterten Funktionen für professionelle Entwicklung.

5.4.1 Schematic-System

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 --help

Custom 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-component

5.4.2 Template-Anpassung

Die 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__';
  }
}
EOF

5.4.3 Workspace-Management

Fü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 --all

Workspace-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"
      }
    }
  }
}

5.4.4 Build- und Optimierungs-Features

Webpack-Integration:

# Mit Webpack bundeln
nest build --webpack

# Bundle-Analyzer
nest build --webpack --bundle-analyzer

# Source Maps generieren
nest build --source-map

TypeScript-Compiler-Optionen:

# Strenge Typisierung
nest build --type-check

# Incremental Build
nest build --incremental

# Watch-Mode mit optimierter Performance
nest start --watch --preserve-watch-output

5.5 Häufig verwendete CLI-Befehle

In 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.

5.5.1 Tägliche Entwicklungsbefehle

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 start

Feature-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ügen

Testing-Workflow:

# Unit Tests
nest test users.service.spec.ts --watch

# E2E Tests
npm run test:e2e

# Test Coverage
npm run test:cov

5.5.2 Module und Service Management

Modulare 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-spec

Shared 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-spec

5.5.3 Database und ORM Integration

TypeORM 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-spec

Prisma Integration:

# Prisma Service
nest g service prisma --no-spec
nest g module prisma

# Repository Pattern mit Prisma
nest g service repositories/user-repository --no-spec

5.5.4 API Development Patterns

REST 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.ts

Microservices 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

5.5.5 Error Handling und Validation

# 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-spec

5.6 Anpassung der CLI

Die NestJS CLI ist hochgradig anpassbar und kann an die spezifischen Bedürfnisse Ihres Teams und Projekts angepasst werden.

5.6.1 Konfigurationsdatei (nest-cli.json)

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:

5.6.2 Custom Schematics entwickeln

Sie 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-module

Beispiel: 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);
  };
}

5.6.3 Team-spezifische Konfiguration

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"

5.6.4 IDE-Integration optimieren

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"
    }
  ]
}

5.6.5 Environment-spezifische Builds

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=development

Die 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.