npm: Fehler bei mkdir '/cache' (EROFS / ENOENT) – Ursache & Lösung
Christoph Schwob·2 Min. Lesezeit
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
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
-
Welcher Cache ist eingestellt?
npm config get cacheSteht hier
/cache/npm(oder ein anderer Pfad direkt unter/), ist das die Ursache. Korrekt wäre/Users/<name>/.npm. -
Aus welcher Datei kommt der Wert?
npm config lsDie 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
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.
Das könnte dich auch interessieren
- .DS_Store-Dateien: verhindern, löschen und aus Git fernhalten – 27. Mai 2017
- Versteckte Dateien am Mac anzeigen (Finder & Terminal) – 5. Dezember 2015
- Homebrew unter macOS: Installation & die wichtigsten Befehle – 22. November 2015