Tips & Tricks

Abhängigkeitsverwaltung und Updates mit Claude Code optimieren

Erfahren Sie, wie Sie Abhängigkeitsverwaltung und Updates mit Claude Code optimieren. Mit praktischen Tipps und Codebeispielen.

Herausforderungen der Abhängigkeitsverwaltung

Moderne JavaScript/TypeScript-Projekte hängen von Hunderten von Paketen ab. Mit Claude Code können Sie Abhängigkeitsupdates sicher und effizient durchführen.

Zustandsprüfung der Abhängigkeiten

Lassen Sie Claude Code Ihre aktuellen Abhängigkeiten analysieren.

Analysiere die Abhängigkeiten des Projekts.
- Liste veralteter Pakete
- Pakete mit Sicherheitslücken
- Ungenutzte Abhängigkeiten
- Duplizierte Abhängigkeiten

Automatisches Update-Skript

import { execSync } from "child_process";
import { readFileSync, writeFileSync } from "fs";

interface OutdatedPackage {
  current: string;
  wanted: string;
  latest: string;
  location: string;
}

function checkOutdated(): Record<string, OutdatedPackage> {
  try {
    const output = execSync("npm outdated --json", {
      encoding: "utf-8",
    });
    return JSON.parse(output);
  } catch (e: any) {
    // npm outdated gibt Exit-Code 1 bei veralteten Paketen zurück
    return JSON.parse(e.stdout || "{}");
  }
}

function categorizeUpdates(
  packages: Record<string, OutdatedPackage>
) {
  const patch: string[] = [];
  const minor: string[] = [];
  const major: string[] = [];

  for (const [name, info] of Object.entries(packages)) {
    const [curMajor, curMinor] = info.current.split(".").map(Number);
    const [latMajor, latMinor] = info.latest.split(".").map(Number);

    if (latMajor > curMajor) {
      major.push(name);
    } else if (latMinor > curMinor) {
      minor.push(name);
    } else {
      patch.push(name);
    }
  }

  return { patch, minor, major };
}

Sicherer Update-Flow

async function safeUpdate(packageName: string) {
  console.log(`Aktualisiere ${packageName}...`);

  // 1. Aktuelle Lock-Datei sichern
  execSync("cp package-lock.json package-lock.json.bak");

  try {
    // 2. Paket aktualisieren
    execSync(`npm install ${packageName}@latest`);

    // 3. Typprüfung
    execSync("npx tsc --noEmit");

    // 4. Tests ausführen
    execSync("npm test");

    // 5. Build-Überprüfung
    execSync("npm run build");

    console.log(`${packageName} erfolgreich aktualisiert`);
    // Backup löschen
    execSync("rm package-lock.json.bak");
  } catch (error) {
    console.error(`Update fehlgeschlagen für ${packageName}, Rollback`);
    execSync("cp package-lock.json.bak package-lock.json");
    execSync("npm install");
    throw error;
  }
}

Ungenutzte Abhängigkeiten erkennen

import depcheck from "depcheck";

async function findUnusedDeps(projectPath: string) {
  const options = {
    ignoreDirs: ["node_modules", "dist", "build"],
    ignorePatterns: ["*.test.*", "*.spec.*"],
  };

  const result = await depcheck(projectPath, options);

  console.log("Ungenutzte dependencies:");
  result.dependencies.forEach((dep) => console.log(`  - ${dep}`));

  console.log("\nUngenutzte devDependencies:");
  result.devDependencies.forEach((dep) => console.log(`  - ${dep}`));

  console.log("\nFehlende Abhängigkeiten:");
  for (const [dep, files] of Object.entries(result.missing)) {
    console.log(`  - ${dep} (verwendet in: ${files.join(", ")})`);
  }

  return result;
}

Renovate/Dependabot-Konfiguration generieren

Lassen Sie Claude Code die CI-Konfiguration für automatische Updates generieren.

// renovate.json
{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": ["config:recommended"],
  "schedule": ["every weekend"],
  "packageRules": [
    {
      "matchUpdateTypes": ["patch"],
      "automerge": true
    },
    {
      "matchUpdateTypes": ["minor"],
      "automerge": true,
      "automergeType": "pr"
    },
    {
      "matchUpdateTypes": ["major"],
      "labels": ["breaking-change"],
      "automerge": false
    },
    {
      "matchPackageNames": ["typescript", "eslint"],
      "groupName": "tooling"
    }
  ]
}

Automatisierung von Sicherheitsaudits

function securityAudit() {
  try {
    const output = execSync("npm audit --json", {
      encoding: "utf-8",
    });
    const audit = JSON.parse(output);

    const critical = audit.metadata.vulnerabilities.critical;
    const high = audit.metadata.vulnerabilities.high;

    if (critical > 0 || high > 0) {
      console.error(
        `Kritisch: ${critical}, Hoch: ${high} Schwachstellen gefunden`
      );
      // Automatische Behebung versuchen
      execSync("npm audit fix");
    }

    return audit;
  } catch (e) {
    console.error("Audit fehlgeschlagen:", e);
    throw e;
  }
}

Prompt-Beispiele für Claude Code

Beispiel-Prompts für die Abhängigkeitsverwaltung mit Claude Code. Zur Automatisierungskonfiguration siehe den Hook-Funktionsleitfaden, für effiziente Nutzung die 10 Tipps für 3-fache Produktivität.

Bereinige die Abhängigkeiten.
- Veraltete Pakete mit npm outdated prüfen
- Patch und Minor gebündelt aktualisieren und Tests ausführen
- Major einzeln aktualisieren und Funktion überprüfen
- Ungenutzte Abhängigkeiten entfernen
- Schwachstellen aus npm audit beheben

Best Practices zur Abhängigkeitsverwaltung finden Sie in der offiziellen npm-Dokumentation. Details zu Claude Code in der offiziellen Dokumentation.

Zusammenfassung

Abhängigkeitsverwaltung ist unscheinbar, aber eine wichtige Aufgabe, die direkt mit Sicherheit und Wartbarkeit zusammenhängt. Mit Claude Code können Sie Updates sicher durchführen, nachdem Sie den Auswirkungsbereich verstanden haben.

#Claude Code #Abhängigkeitsverwaltung #npm #Sicherheit #Automatisierung