Zum Inhalt springen

~/CodeBlog.at

npm: Fehler bei mkdir '/cache' (EROFS / ENOENT) – Ursache & Lösung

·2 Min. Lesezeit

Veröffentlicht
Überarbeitet

Was ist neu: Ursache erklärt, ENOENT-Variante neuerer npm-Versionen ergänzt, Diagnose und Lösung per npm config für Intel und Apple Silicon.

Kurz & knapp

Die Fehler EROFS: read-only file system, mkdir '/cache' bzw. in neueren npm-Versionen ENOENT: no such file or directory, mkdir '/cache' entstehen, wenn in einer npm-Konfiguration cache=/cache/npm steht – das Root-Volume von macOS ist schreibgeschützt. Mit npm config ls die Datei finden und den Eintrag per npm config delete cache --location=global entfernen; danach nutzt npm wieder ~/.npm.

Getestet mit: npm 11.20, Node.js 26, macOS 27

Inhalt
  1. Die Ursache
  2. Diagnose
  3. Lösung

Diesen Fehler hatte ich immer wieder bei einem npm update – plötzlich ging gar nichts mehr. Ältere npm-Versionen meldeten ihn etwa so:

npm ERR! code EROFS
npm ERR! syscall mkdir
npm ERR! path /cache
npm ERR! EROFS: read-only file system, mkdir '/cache'

Mit aktuellem npm (getestet mit npm 11 und Node.js 26) sieht dieselbe Ursache etwas anders aus – statt EROFS meldet npm nun ENOENT:

npm error code ENOENT
npm error syscall mkdir
npm error path /cache
npm error enoent ... ENOENT: no such file or directory, mkdir '/cache'
npm error Log files were not written due to an error writing to the directory: /cache/npm/_logs

Die Ursache

In einer der npm-Konfigurationsdateien (npmrc) steht ein Cache-Pfad direkt unter dem Wurzelverzeichnis, zum Beispiel:

cache=/cache/npm

npm versucht dann, den Ordner /cache anzulegen. Das scheitert, weil macOS seit Catalina das System auf einem schreibgeschützten Volume betreibt – direkt unter / lassen sich keine Ordner mehr anlegen, auch nicht mit sudo. Woher der Eintrag kommt, ist oft unklar – bei mir stand er in der ersten Zeile der globalen npmrc von Homebrew (/usr/local/etc/npmrc auf meinem damaligen Intel-Mac).

Diagnose

  1. Welcher Cache ist eingestellt?

    npm config get cache

    Steht hier /cache/npm (oder ein anderer Pfad direkt unter /), ist das die Ursache. Korrekt wäre /Users/<name>/.npm.

  2. Aus welcher Datei kommt der Wert?

    npm config ls

    Die Ausgabe ist nach Dateien gruppiert. Steht cache = "/cache/npm" unter ; "global" config from …, kommt er aus der globalen npmrc; unter ; "user" config from … aus deiner ~/.npmrc.

Konfiguration Speicherort (Node.js aus Homebrew)
global (Apple Silicon) /opt/homebrew/etc/npmrc
global (Intel) /usr/local/etc/npmrc
Benutzer ~/.npmrc
Projekt .npmrc im Projektordner

Lösung

Den falschen Eintrag einfach entfernen – je nachdem, wo er steht:

npm config delete cache --location=global   # globale npmrc
npm config delete cache --location=user     # ~/.npmrc

Alternativ die Zeile cache=… direkt in der Datei löschen. Danach prüfen:

npm config get cache
# /Users/<name>/.npm

npm verwendet jetzt wieder den Standard-Cache ~/.npm, und npm install bzw. npm update laufen wie gewohnt.

Häufige Fragen

Warum kann npm den Ordner /cache nicht anlegen?

Seit macOS Catalina liegt das System auf einem schreibgeschützten Volume. Ordner direkt unter / lassen sich nicht anlegen – auch nicht mit sudo.

Wo liegt die globale npmrc auf dem Mac?

Bei Node.js aus Homebrew unter /opt/homebrew/etc/npmrc (Apple Silicon) bzw. /usr/local/etc/npmrc (Intel). Die benutzerbezogene Datei ist ~/.npmrc. npm config ls zeigt, welche Dateien aktiv sind.

Wo liegt der npm-Cache standardmäßig?

Auf macOS und Linux unter ~/.npm. Ohne eigenen cache-Eintrag in einer npmrc verwendet npm automatisch diesen Ordner.

Muss ich den Cache danach löschen?

Nein. Nach dem Entfernen des falschen Eintrags funktioniert npm sofort wieder mit dem Standard-Cache.

Quellen & weiterführende Links

  1. npm config (öffnet in neuem Tab) – npm Docs
  2. npmrc – Speicherorte der Konfigurationsdateien (öffnet in neuem Tab) – npm Docs
  3. Config – cache (öffnet in neuem Tab) – npm Docs
  4. Informationen zum schreibgeschützten Systemvolume in macOS Catalina oder neuer (öffnet in neuem Tab) – Apple Support

Geschrieben von

Christoph Schwob (öffnet in neuem Tab)

Ich bin Christoph Schwob, halbkreativer Entwickler aus Österreich und arbeite seit über 10 Jahren an und mit TYPO3. Hier sammle ich Lösungen, Code-Snippets und Notizen rund um TYPO3, macOS, Server, Homelab und alles andere.

Suche

Tippe einen Suchbegriff ein.