‘npm ERR! code EACCES’ bij npm install -g? npm mag niet schrijven in de globale map. Zo los je het op zonder sudo, met nvm of een eigen prefix.
EACCES bij npm betekent dat npm iets wil schrijven in een map waar jouw gebruiker geen schrijfrechten heeft. Meestal gebeurt dat bij npm install -g: globale pakketten gaan naar de prefix-map van npm, en bij een Node.js-installatie via het systeem of een installatiepakket is dat vaak /usr/local of /usr. Die mappen zijn van root.
De voor de hand liggende oplossing, sudo npm install -g, werkt wel, maar maakt het daarna vaak erger. Bestanden en mappen krijgen root als eigenaar, ook in je eigen npm-cache (~/.npm). Bij een volgende installatie zonder sudo krijg je dan opnieuw EACCES, nu op je eigen cache. Daarnaast draaien installatiescripts van pakketten met sudo met volledige rechten op je systeem.
In een project (zonder -g) hoort npm nooit sudo nodig te hebben. Krijg je daar EACCES, dan is node_modules, package-lock.json of de cache meestal eerder met sudo aangemaakt en nu van root.
/usr/local/lib/node_modules of /usr/lib/node_modules: dat is de globale map.~/.npm of zegt dat de cachemap bestanden van root bevat: eerder is npm met sudo gedraaid.Menunamen kunnen per versie of toestel iets anders heten. Loop de stappen op volgorde af en stop zodra het werkt.
Vraag de prefix op en controleer wie eigenaar is van die map. Is dat root en draai jij als gewone gebruiker, dan is dat de oorzaak. Kijk ook welke node je gebruikt; staan er meerdere installaties naast elkaar, dan kan dat verwarrend zijn.
npm config get prefix
ls -ld "$(npm config get prefix)/lib/node_modules"
which node npmVeel hulpmiddelen hoef je niet globaal te installeren. Met npx start je een pakket eenmalig zonder het globaal te zetten, en als ontwikkelafhankelijkheid in het project heeft iedereen in het team dezelfde versie.
npx create-vite@latest mijn-app
npm install --save-dev eslint
npx eslint .Met nvm (Node Version Manager) staat Node.js in je eigen thuismap. Globale pakketten gaan dan ook daarheen en sudo is niet meer nodig. Bovendien kun je per project een andere Node.js-versie gebruiken. Installeer nvm volgens de instructies van het project zelf en open daarna een nieuwe terminal. Voor Windows bestaat een apart project, nvm-windows.
nvm install --lts
nvm use --lts
nvm alias default 'lts/*'
which node
npm install -g pakketnaamWil je de bestaande Node.js-installatie houden, laat npm globale pakketten dan in een map in je thuismap zetten. Voeg de bin-map daarvan toe aan je PATH, zodat de commando’s gevonden worden. Gebruik je zsh, zet de regel dan in ~/.zshrc.
mkdir -p ~/.npm-global
npm config set prefix ~/.npm-global
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.profile
source ~/.profile
npm install -g pakketnaamMeldt npm dat de cachemap bestanden van root bevat, zet de eigenaar dan terug op jouw gebruiker. Dit is een van de weinige keren dat je sudo nodig hebt, en alleen voor deze ene map.
sudo chown -R $(id -u):$(id -g) ~/.npmIs in het project eerder sudo npm install gedraaid, dan zijn node_modules en soms package-lock.json van root. Zet de eigenaar terug, of verwijder node_modules en installeer opnieuw zonder sudo. Ligt het project op een server onder een andere gebruiker, voer npm dan uit als die gebruiker.
ls -ld node_modules package-lock.json
sudo chown -R $(id -u):$(id -g) node_modules package-lock.json
# of opnieuw installeren:
sudo rm -rf node_modules
npm installOp Windows heet een vergelijkbare fout vaak EPERM. Meestal houdt een ander programma een bestand vast: een open editor, een draaiende ontwikkelserver of een virusscanner. Sluit die programma’s en probeer opnieuw. Start de terminal niet standaard als administrator; dat geeft dezelfde problemen als sudo.
Let op: Gebruik geen sudo voor npm install in een project, en zet nooit chmod 777 op /usr/local of node_modules. Je verschuift het probleem dan, en installatiescripts van pakketten krijgen meer rechten dan nodig.
Pakketten op npm kunnen bij installatie scripts uitvoeren. Met sudo draaien die scripts als root, met toegang tot het hele systeem. Daarnaast raken bestanden in je thuismap van root, waardoor latere installaties zonder sudo misgaan.
npx.Kom je er met deze stappen niet uit, of wil je het liever niet zelf doen? We kijken online mee of komen langs. Hulp op afstand kost €20 per uur; komen we langs, dan is de prijs op aanvraag. Je weet vooraf waar je aan toe bent.
Schrijf kort wat er misgaat en wat je al hebt geprobeerd. Kies of we bellen, online meekijken of langskomen.
npm wil schrijven in een globale map die van root is, zoals /usr/local/lib/node_modules. Installeer Node.js via nvm of stel een eigen prefix in je thuismap in.
Liever niet. Het werkt eenmalig, maar maakt bestanden van root en laat installatiescripts met volledige rechten draaien. Daarna krijg je vaak nieuwe EACCES-fouten.
Zet de eigenaar terug met sudo chown -R $(id -u):$(id -g) ~/.npm en draai npm daarna weer zonder sudo.
Niet per se. Na installatie van nvm komt de versie van nvm eerst in je PATH. Controleer met which node dat je de versie uit je thuismap gebruikt.
Hulp nodig van een mens? Website-onderhoud · Hosting en onderhoud · WordPress-support · Alle oplossingen