1442 votes

Comment réparer l'erreur de lancement de npm sans sudo ?

Je viens d'installer node et npm par le biais du paquetage sur nodejs.org, et chaque fois que j'essaie de rechercher ou d'installer quelque chose avec npm, il jette l'erreur suivante à moins que je sudo la commande. J'ai l'impression que c'est un problème de permissions ? Je suis déjà l'administrateur.

npm ERR! Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR!  { [Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/Users/chietala/.npm/-/all/.cache.json' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 12.2.0
npm ERR! command "node" "/usr/local/bin/npm" "search" "bower"
npm ERR! cwd /Users/chietala
npm ERR! node -v v0.10.4
npm ERR! npm -v 1.2.18
npm ERR! path /Users/chietala/.npm/-/all/.cache.json
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/chietala/npm-debug.log
npm ERR! not ok code 0

42 votes

Veuillez considérer la solution en utilisant NVM : stackoverflow.com/a/24404451/1480391 (au lieu de pirater avec des permissions)

2 votes

@janaspage Vous ne pouvez pas installer node ou NVM (Node Version Manager) via NPM (Node Package Manager), c'est un non-sens. NPM fait partie de node (il est installé en même temps). Jetez un coup d'œil à la page Wikipedia : fr.wikipedia.org/wiki/Npm_(software)

5 votes

Enfin une solution meilleure que sudo chown : github.com/sindresorhus/guides/blob/master/

2419voto

Noah Points 7066

Cela ressemble à un problème de permissions dans votre répertoire personnel. Pour récupérer la propriété du fichier .npm exécuter le répertoire :

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

1 votes

Oui, c'était ça le problème. Merci.

116 votes

Je pensais que whoami était un caractère de remplacement, mais il fonctionne tel quel lorsqu'il est tapé littéralement, donc il doit s'agir d'une variable que je ne comprends pas.

140 votes

Whoami est une commande shell réelle fr.wikipedia.org/wiki/Whoami . Les backticks autour de whoami s'assurer qu'il est exécuté correctement et ensuite placé dans la commande chown

710voto

Yves M. Points 1439

Les permissions que vous avez utilisées lors de l'installation de Node seront requises lorsque vous ferez des choses comme écrire dans votre fichier répertoire npm ( npm link , npm install -g etc.).

Vous avez probablement exécuté l'installation de Node.js avec les permissions Root, c'est pourquoi l'installation du paquet global vous demande d'être Root.


Solution 1 : NVM

Ne bidouillez pas les permissions, installez Node.js de la bonne façon.

Sur une machine de développement, vous ne devez pas installer et exécuter Node.js avec les droits Root, sinon des choses comme npm link , npm install -g auront besoin des mêmes permissions.

NVM (Node Version Manager) vous permet d'installer Node.js sans les autorisations Root et vous permet également d'installer de nombreuses versions de Node pour jouer facilement avec elles . Parfait pour le développement.

  1. Désinstallez Node (la permission de la racine sera probablement requise). Ce site pourrait vous aider.
  2. Ensuite, installez NVM les instructions suivantes sur cette page .
  3. Installer le nœud via NVM : nvm install node

Maintenant npm link , npm install -g n'exigera plus que vous soyez Root.

Edit : Voir aussi https://docs.npmjs.com/getting-started/fixing-npm-permissions


Solution 2 : Installer les paquets globalement pour un utilisateur donné

Ne bidouillez pas les permissions, installez les paquets npm de manière globale et correcte.

Si vous êtes sous OSX ou Linux, vous pouvez créer un répertoire dédié à l'utilisateur pour votre paquet global et mettre en place npm y node pour savoir comment trouver les paquets installés globalement.

Vérifiez ce grand article pour des instructions pas à pas sur l'installation globale des modules npm sans sudo.

Voir aussi : la documentation de npm sur Corriger les permissions de npm .

1 votes

Merci. La réponse semble correcte, je vais la tester et vous le dire.

43 votes

De toutes les solutions proposées, c'est la solution NVM qui m'a donné les meilleurs résultats. Je recommande vivement d'utiliser la solution NVM plutôt que de jouer avec les permissions.

9 votes

Ces instructions ont très bien fonctionné. Cependant, vous voudrez probablement supprimer les modules que vous avez installés avec sudo avant de désinstaller nodejs : npm ls -gp | awk -F/ '/node_modules/ && !/node_modules.*node_modules/ {print $NF}' | xargs npm -g rm - J'ai dû réinstaller nodejs et dans un Root shell et les désinstaller, sinon vous continuerez à avoir des symlinks vers yo, grunt, etc .

400voto

Xilo Points 1739

Vous aurez également besoin de la permission d'écriture dans node_modules répertoire :

sudo chown -R $USER /usr/local/lib/node_modules

7 votes

Ainsi que le ~/tmp pour moi.

140 votes

Je ne sais pas pourquoi cette question reçoit encore des votes positifs. C'est une très mauvaise pratique de changer la propriété des répertoires du système pour un utilisateur particulier ! Veuillez consulter la réponse ci-dessous pour d'autres solutions (comme la création d'un groupe distinct pour les utilisateurs de nœuds).

1 votes

Je n'ai pas node_modules sur /usr/local/lib/ . wtf ?

115voto

Joel Purra Points 7366

Changer le propriétaire des dossiers "system-global" est un piratage. Sur une nouvelle installation, je voudrais configurer NPM pour utiliser un emplacement déjà inscriptible pour les programmes "utilisateur-global" :

npm config set prefix "${HOME}/npm"

Assurez-vous ensuite d'ajouter ce dossier à votre chemin d'accès :

export PATH="${PATH}:${HOME}/npm/bin"

Voir Réponse de @ErikAndreas a Les modules NPM ne s'installeront pas globalement sans sudo y un guide plus long, étape par étape par @sindresorhus avec également des décors $MANPATH .

0 votes

Je suis tout à fait d'accord, sauf que je suggérerais que si vous définissez simplement le préfixe à $HOME alors généralement votre .profile script s'occupera de la $PATH la prochaine fois que vous la solliciterez (par exemple, la prochaine fois que vous vous connecterez).

0 votes

JessAustin : Peut-être, mais ça va aussi apporter plus de désordre dans votre $HOME et pourrait interférer avec d'autres (futurs ?) fichiers/sous-dossiers NPM. Préférez garder les binaires de différents gestionnaires de paquets/langues/systèmes de construction séparés, et définissez explicitement le paramètre $PATH (dans un script de connexion) à la place.

0 votes

Eh, le désordre ? Nous parlons juste des modules installés globalement dans ~/lib/node_modules avec leur CLI associé, s'il en existe, dans ~/bin . Pour beaucoup d'utilisateurs, surtout s'ils n'ont pas de Root, les deux ~/bin y ~/lib existent déjà.

61voto

danomarr Points 245

J'ai rencontré ce problème lors de l'installation de Recess ( https://github.com/twitter/recess ) pour compiler mon CSS pour Bootstrap 3.

Lors de l'installation de la niche :

-npm install recess -g
  1. Vous devez débloquer les autorisations dans votre home comme Noah dit :

    sudo chown -R `whoami` ~/.npm
  2. Vous devez également avoir les droits d'écriture sur le node_modules comme Xilo dit, donc si ça ne marche toujours pas, essayez :

    sudo chown -R `whoami` /usr/local/lib/node_modules
  3. Si vous voyez toujours des erreurs, vous devrez peut-être aussi correct /usr/local permissions :

    sudo chown -R `whoami` /usr/local

Veuillez noter que, comme indiqué dans ce poste /usr/local/ n'est pas vraiment un dir système si vous êtes sur un Mac, donc cette réponse est parfaitement "sûre" pour les utilisateurs de Mac. Cependant, si vous êtes sous Linux, voir Christopher Will La réponse de l'auteur ci-dessous propose une solution conviviale pour plusieurs utilisateurs et sûre pour le système (mais plus complexe).

39 votes

C'est une mauvaise idée. Vous ne souhaitez probablement pas que les répertoires système appartiennent à un utilisateur particulier. Outre de graves problèmes de sécurité, cette solution n'est pas non plus compatible avec le multi-utilisateur.

2 votes

Oui mais c'est une excellente solution pour un environnement de développement +2, surtout si vous avez déjà installé node.js et que vous avez juste besoin de continuer à vous balancer !

0 votes

Vous ne devriez vraiment pas posséder de paquets en dehors de votre répertoire personnel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X