Layer 8Ehrlicher Tech-Support

npx startet alte Version: ohne Angabe nimmt es, was da ist

npx create-xyz startet eine alte Fassung: Ohne Versionsangabe nimmt npx, was im Projekt oder im Cache liegt, und prüft nicht auf Neueres.

Aufwand:
ca. 5 Min.
Voraussetzung:
npm CLI mit npx, npm-Dokumentation zu npx und npm exec
Gilt für:
npm CLI v10 (Dokumentation zu npx und npm exec in der am 2026-10-15 abrufbaren Fassung); npx ist dort ein Alias von npm exec, Andere npm-Hauptversionen sind hier nicht geprüft

Das Symptom

Der Entwickler ruft npx create-irgendwas auf, um ein neues Projekt anzulegen, und bekommt ein Gerüst mit veralteten Abhängigkeiten oder eine Warnung, dass diese Version nicht mehr unterstützt wird. Er ist sicher, dass npx immer die neueste Version holt, schließlich installiert es ja nichts dauerhaft. Danach wird die Registry verdächtigt, der Firmenproxy oder ein kaputter npm-Cache, und nicht selten wird npm cache clean –force ausgeführt, was alle Pakete neu lädt, ohne dass die Ursache verstanden ist.

Die „Layer 8“-Wahrheit

Die npx-Dokumentation beschreibt die Auswahlreihenfolge: „Package names provided without a specifier will be matched with whatever version exists in the local project. Package names with a specifier will only be considered a match if they have the exact same name and version as the local dependency.“ Ein Paketname ohne Versionsangabe trifft also zuerst das, was im Projekt liegt. Ist das Paket im Projekt nicht vorhanden, wird es installiert, und zwar nicht nirgendwohin: „If any requested packages are not present in the local project dependencies, then they are installed to a folder in the npm cache, which is added to the PATH environment variable in the executed process.“

Der Abschnitt zum Cache in der Dokumentation von npm exec sagt dazu: „The npm cli utilizes its internal package cache when using the package name specified.“ Was einmal im Cache liegt, wird beim nächsten Aufruf ohne Versionsangabe wiederverwendet. Erst die Einstellung prefer-online ändert das: „Forces staleness checks for packages, making the cli look for updates immediately even if the package is already in the cache.“

Wer also die aktuelle Fassung will, sagt es: npx create-irgendwas@latest. Genau darum steht in den meisten Projekt-Startanleitungen inzwischen ein @latest hinter dem Paketnamen; es ist kein Schmuck, sondern die Versionsangabe, die den lokalen Treffer und den Cache-Treffer außer Kraft setzt, weil nur ein Paket mit genau dieser Version als Treffer gilt.

Der Glaubenssatz, npx lade immer das Neueste, kommt daher, dass npx nichts in das Projekt schreibt. Nichts installieren und immer das Neueste holen sind aber zwei verschiedene Eigenschaften, und npx hat nur die erste. Die zweite muss man bestellen, mit sieben Zeichen hinter dem Namen oder mit einem Schalter, und beide stehen in der Dokumentation, nicht im Cache.

Für den Alltag bleibt eine einfache Regel: Ein Werkzeug, das ein Projekt anlegt, bekommt immer eine Versionsangabe, und ein Werkzeug, das zum Projekt gehört, läuft in der Version des Projekts. npx macht beides richtig, wenn man ihm sagt, welches von beiden gemeint ist. Ohne diese Angabe entscheidet es selbst, und seine Entscheidung ist die naheliegende, nicht die neueste.

Die echte, verifizierte Lösung

1000 % faktenbasiert. Jeder Befehl ist real, jeder Pfad existiert. Schritt für Schritt:

  1. 1.

    Beim Anlegen von Projekten die Version mitgeben

    Jeden Aufruf eines Projektgenerators mit @latest oder einer konkreten Version schreiben. Das ist der Grund, warum in fast allen Startanleitungen inzwischen ein @latest hinter dem Paketnamen steht: Es ist die Versionsangabe, die den lokalen und den Cache-Treffer außer Kraft setzt, nicht ein Schmuck, den man weglassen kann.

    npx create-irgendwas@latest mein-projekt
    
  2. 2.

    Prüfen, ob das Paket als Abhängigkeit im Projekt liegt

    Liegt das Paket in den Abhängigkeiten des aktuellen Projekts, führt npx ohne Versionsangabe genau diese Fassung aus. Das ist gewollt, denn so laufen Werkzeuge in der Version, mit der das Projekt getestet wurde. Wer die Registry-Version will, muss sie angeben oder das Projektverzeichnis verlassen.

    npm ls paketname
    
  3. 3.

    Eine Aktualitätsprüfung erzwingen statt den Cache zu leeren

    Mit --prefer-online lässt sich npx anweisen, sofort nach Aktualisierungen zu suchen, auch wenn das Paket schon im Cache liegt. Das ist die gezielte Antwort auf den Cache-Treffer und lässt alle anderen Pakete im Cache in Ruhe.

    npx --prefer-online paketname
    
  4. 4.

    In Anleitungen das @latest stehen lassen

    Wer Anleitungen für andere schreibt, lässt die Versionsangabe im Aufruf stehen und erklärt in einem Halbsatz, warum sie da ist. Sonst kopiert die nächste Person den Aufruf ohne das Anhängsel, bekommt ein altes Gerüst und sucht den Fehler in der Registry.

Häufige Fragen (FAQ)

?npx installiert doch nichts. Warum startet es trotzdem eine alte Version?

Weil npx zuerst im Projekt und dann im Cache nachsieht. Die Dokumentation beschreibt die Auswahl: „Package names provided without a specifier will be matched with whatever version exists in the local project. Package names with a specifier will only be considered a match if they have the exact same name and version as the local dependency.“ Liegt das Paket im Projekt, wird genau diese Version ausgeführt, egal was die Registry inzwischen anbietet. Ohne Versionsangabe hat npx keinen Grund, nach etwas Neuerem zu suchen.

?Und wenn das Paket gar nicht im Projekt ist?

Dann wird es in den npm-Cache installiert und von dort ausgeführt: „If any requested packages are not present in the local project dependencies, then they are installed to a folder in the npm cache, which is added to the PATH environment variable in the executed process.“ Beim nächsten Aufruf liegt es dort bereits, und die Dokumentation zu npm exec sagt: „The npm cli utilizes its internal package cache when using the package name specified.“ Wer gestern ein Projektgerüst angelegt hat, bekommt heute dasselbe Gerüst, auch wenn über Nacht eine neue Fassung erschienen ist.

?Wie erzwinge ich die aktuelle Version?

Indem man sie benennt: npx create-irgendwas@latest. Die Versionsangabe setzt den Treffer im Projekt und im Cache außer Kraft, weil nur ein Paket mit genau dieser Version als Treffer gilt. Alternativ erzwingt die Einstellung prefer-online eine Aktualitätsprüfung; die Dokumentation zu npm exec beschreibt sie so: „Forces staleness checks for packages, making the cli look for updates immediately even if the package is already in the cache.“

?Hilft npm cache clean --force?

Es leert den gesamten Cache und zwingt damit jedes Paket zum Neuladen, auch die, die gar nichts mit dem Problem zu tun haben. Als Werkzeug gegen eine veraltete npx-Version ist das ein Vorschlaghammer, und er trifft den Fall nicht, in dem das Paket als Abhängigkeit im Projekt liegt, denn dort nimmt npx die Projektversion unabhängig vom Cache. Die Versionsangabe hinter dem Paketnamen löst beide Fälle und kostet sieben Zeichen.

Belege

Diese Seite ist gegen die folgenden Primärquellen geprüft – Hersteller, Standard oder Gesetzestext. Wer es nicht glaubt, muss es nicht: Da steht, wo es nachzulesen ist.

Zuletzt geprüft am . Dokumentation altert – ein Datum daneben ist der einzige ehrliche Umgang damit.

Auch zu finden unter

Verwandte Fehler

SWLästig

npm meldet Schwachstellen (vulnerabilities)

npm warnt nach der Installation vor Sicherheitslücken? Nicht jede ist gefährlich — und ein blindes npm audit fix kann mehr kaputt machen, als es behebt.