Sur l'installation npm: erreur de rejet non gérée: EACCES: autorisation refusée


271

J'ai réussi à corrompre mon npminstallation, et chaque fois que j'essaie d'installer des packages à l'aide npm install, je reçois des messages d'erreur dans le sens suivant:

Erreur de rejet non gérée: EACCES: autorisation refusée, ouvrez '/Users/marknorgate/.npm/_cacache/tmp/a449402d'

J'ai essayé de réinstaller node & npm, et j'ai également essayé de déplacer mon cache npm ailleurs en utilisant ces instructions mais rien ne fonctionne.

Comment puis-je le faire fonctionner?

Réponses:


925

Restaurez la propriété des dossiers liés à npm de l'utilisateur, à l'utilisateur actuel, comme ceci:

sudo chown -R $USER:$GROUP ~/.npm
sudo chown -R $USER:$GROUP ~/.config

10
Cela a fonctionné pour moi après avoir essayé 4-5 autres choses qui n'ont pas fonctionné: 1) --unsafe-perm, 2) mise à niveau npm, 3) redémarrage, 4) exécution avec sudo, etc. etc.
Alex York

2
Identique à @AlexYork pour moi. J'ai déjà vu mon utilisateur et mon groupe comme le propriétaire de ces deux mais je suppose qu'un ou deux sous-répertoires avaient des propriétaires différents. Merci!
Vedran

1
Cela a fonctionné pour moi :), avant cela, j'essayais ce docs.npmjs.com/… . Pas en mesure de comprendre si c'est un même problème ou différent.
nim118

1
On dirait qu'à un moment donné de mon fléau avec le nœud, l'un de ces répertoires de cache a été créé avec rootpropriété. Cela a tout arrangé. Je vous remercie!
Lonnon Foster

2
cela a fonctionné pour moi, merci! J'ai essayé de réinstaller npm avec un gestionnaire de version de noeud recommandé par npm mais cela n'a pas fonctionné!
Winnie Phan


42

Cela se produit si la première fois que vous exécutez NPM, c'est avec sudo, par exemple lorsque vous essayez de faire une installation de npm -g.

Les dossiers de cache doivent appartenir à l'utilisateur actuel et non à root.

sudo chown -R $USER:$GROUP ~/.npm
sudo chown -R $USER:$GROUP ~/.config

Cela donnera la propriété des dossiers ci-dessus lors de l'exécution avec des autorisations utilisateur normales (pas en tant que sudo).

Il convient également de noter que vous ne devez pas installer de packages globaux à l'aide de SUDO. Si vous rencontrez des problèmes avec les autorisations, cela vaut la peine de changer votre répertoire global. Les documents recommandent:

mkdir ~/.npm-global

npm config set prefix '~/.npm-global'

Ensuite, mettez à jour votre PATH là où vous le définissez (~ / .profile etc.)

export PATH=~/.npm-global/bin:$PATH

Vous devrez ensuite vous assurer que la variable env PATH est définie (redémarrage du terminal ou utilisation de la commande source)

https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally


3
Voter ceci pour l'explication claire de pourquoi :)
lnoogn

Ouaip. Cela a résolu le problème pour moi lorsque la "bonne solution" ci-dessus ne l'a pas fait.
John Smith

Toutes ces choses devraient être résumées par npm, mais à la place, nous devons les traiter manuellement. On pourrait penser qu'il serait hautement prioritaire pour les responsables de réparer des choses comme ça, mais que sais-je. Merci d'avoir expliqué pourquoi nous devons exécuter ces commandes!
YungGun


9

La réponse ci-dessus n'a pas fonctionné pour moi. Essayez simplement d'exécuter votre commande avec --unsafe-perm.

par exemple

npm install -g node@latest --unsafe-perm

Cela semble résoudre le problème.


@JenLim l'avez-vous trié ou non?
Junaid Farooq

J'ai résolu le problème en exécutant ce qui suit dans le terminal: npm cache clear - force.
Aspyn Lim


2

créez simplement des dossiers _cache/tmpsous .npmmanuellement à l'emplacement /Users/marknorgate/.npm/_cacache/tmpet exécutez votre commande avec un accès administrateur


2
sudo npm install --unsafe-perm=true --allow-root

C'est celui qui a fonctionné pour moi



1

Faites simplement sudo npm cache clean --force --unsafe-permet npm iirez normalement.


1

changer de propriétaire

sudo chown -R $USER:$GROUP ~/.npm
sudo chown -R $USER:$GROUP ~/.config 

travaillé comme j'ai installé le paquet en utilisant sudo


1

Essayez d'utiliser ceci: Sur la ligne de commande, dans votre répertoire personnel, créez un répertoire pour les installations globales:

mkdir ~/.npm-global

Configurez npm pour utiliser le nouveau chemin de répertoire:

npm config set prefix '~/.npm-global'

Dans votre éditeur de texte préféré, ouvrez ou créez un fichier ~ / .profile et ajoutez cette ligne:

export PATH=~/.npm-global/bin:$PATH

Sur la ligne de commande, mettez à jour vos variables système:

source ~/.profile

Maintenant, utilisez npm install cela devrait fonctionner.


0

vous pouvez essayer la commande suivante pour expo:

sudo chown -R $USER:$GROUP ~/.expo


0

Exécutez simplement sur le terminal: sudo chown -R $(whoami) ~/.npm

Cela a fonctionné pour moi !!


-1

Celui-ci fonctionne pour moi:

sudo chown -R $(whoami) ~/.npm

Je n'ai pas utilisé le -gcar je suis le seul utilisateur. J'ai utilisé un MacBook Air.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.