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?

serlingpa
la source

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
SrAxi
la source
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
67

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

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

Osama Rashid
la source
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

Ryu Kent
la source
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
11
sudo npm cache clean --force --unsafe-perm

puis npm je vais normalement

Mwangi Gituathi
la source
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.

Junaid Farooq
la source
@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
6

Si aucune des suggestions de réponses élaboré, essayez la commande suivante: npm cache clear --force. Ça a marché pour moi.

Je l'ai trouvé sur https://github.com/vuejs/vue-cli/issues/1809 .

Aspyn Lim
la source
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

Anshuman Jaiswal
la source
2
sudo npm install --unsafe-perm=true --allow-root

C'est celui qui a fonctionné pour moi

BliteKnight
la source
1

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

James Okunlade
la source
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

Technologue
la source
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.

AyushKatiyar
la source
0

vous pouvez essayer la commande suivante pour expo:

sudo chown -R $USER:$GROUP ~/.expo
cesur bağcı
la source
0

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

Cela a fonctionné pour moi !!

Akshita Agarwal
la source
-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.

Arly Ordonez
la source