web-dev-qa-db-fra.com

L'utilisateur "root" de gyp WARN EACCES n'est pas autorisé à accéder au répertoire de développement

Essayer

Sudo npm install protractor -g

et la même erreur/avertissement notoire (googlé en vain):

gyp WARN EACCES user "root" does not have permission to access the dev dir "/Users/dmitrizaitsev/.node-gyp/0.12.0"

Ce qui semble se produire, c'est que node version 0.12.0 est téléchargé et reconstruit, encore et encore au cours de la même installation, bien qu'il s'agisse de la version actuelle du nœud sur ma machine:

node -v
v0.12.0

Des questions:

  • Le répertoire "/Users/dmitrizaitsev/.node-gyp/0.12.0" est réellement manquant! Pourquoi un tel message trompeur?

  • Pourquoi ce répertoire n'a-t-il pas été créé non plus pendant le node v0.12.0 ni lors de la précédente reconstruction réussie avec node-gyp?

  • (Évidemment) Comment puis-je empêcher que cela se produise?

J'exécute Mac OSX 10.8.5 si cela est important.

41
Dmitri Zaitsev

MISE À JOUR. Il y a une meilleure façon de changer le répertoire global par défaut de npm en sous-répertoire utilisateur sur lequel vous avez déjà les autorisations correctes, donc pas besoin de jouer avec les autorisations ou la propriété du fichier système en premier lieu.

Comme recommandé dans https://docs.npmjs.com/getting-started/fixing-npm-permissions :

  1. Créez un répertoire pour les installations globales:
mkdir ~/.npm-global
  1. Configurez npm pour utiliser le nouveau chemin de répertoire:
npm config set prefix '~/.npm-global'
  1. Ouvrez ou créez un ~/.profile (ou ~/.bash_profile etc) et ajoutez cette ligne (à la fin du fichier):
export PATH=~/.npm-global/bin:$PATH
  1. Sur la ligne de commande, mettez à jour vos variables système:
source ~/.profile

ou source ~/.bash_profile

Voir aussi le guide de Sindre Sorhus sur le sujet: https://github.com/sindresorhus/guides/blob/master/npm-global-without-Sudo.md


Ont maintenant compris ce qui n'allait pas:

Le répertoire avait des autorisations incorrectes - il n'était pas accessible en écriture (ce qui aurait été un meilleur message d'erreur que "accessible").

Et parce qu'il n'était pas accessible en écriture, un répertoire temporaire a été utilisé et supprimé après chaque utilisation, c'est pourquoi le téléchargement entier a dû s'exécuter encore et encore.

La solution consiste à définir des autorisations utilisateur avec

Sudo chown -R $USER <directory>

et jamais Sudo npm encore. Il semble que chaque fois que vous exécutez Sudo npm, tous les sous-répertoires créés obtiennent des autorisations incorrectes, ce qui entraînera des problèmes plus tard.

Voir ici pour plus de détails .

67
Dmitri Zaitsev

Essayez avec:

Sudo npm install -g module - unsafe-perm

18
Miki Nacucchi

C'est parce que vous n'avez pas de dossier dans ce répertoire "/Users/dmitrizaitsev/.node-gyp/0.12.0".

Créez simplement un nouveau dossier nommé 0.12.0 qui est le numéro de version de votre nœud

Cela résoudra le problème.

2
Jack Lee