151 votes

Permission refusée lors de l'installation de modules npm sous OSX

J'essaie d'installer node-g.raphael et j'obtiens l'erreur suivante :

Bender-03:htdocs alfred$ sudo npm install node-g.raphael --save
Password:

> contextify@0.1.15 install 
  /Users/alfred/Sites/twistedgeo/htdocs/node_modules/contextify
> node-gyp rebuild

gyp ERR! configure error
gyp ERR! stack Error: EACCES: permission denied, mkdir 
  '/Users/alfred/Sites/twistedgeo/htdocs/node_modules/contextify/build'
gyp ERR! System Darwin 16.7.0
gyp ERR! command "/usr/local/bin/node" 
  "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" 
  "rebuild"
gyp ERR! cwd 
  /Users/alfred/Sites/twistedgeo/htdocs/node_modules/contextify
gyp ERR! node -v v8.8.1
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: contextify@0.1.15 
  (node_modules/contextify):
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: contextify@0.1.15 
  install: `node-gyp rebuild`
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1

+ node-g.raphael@0.0.9
added 2 packages and updated 1 package in 6.556s

J'ai essayé cette solution mais cela ne résout pas mon problème, je reçois toujours la même erreur.

Faites-moi savoir si je peux ajouter quelque chose pour vous aider à résoudre ce problème.

468voto

antzshrek Points 2630

J'ai vu ça dans Corriger les permissions de npm et ça a aidé, peut-être que tu pourrais essayer aussi.

Option 1 : Changer la permission pour le répertoire par défaut de npm

  1. Trouvez le chemin vers le répertoire de npm :

    npm config get prefix

    Pour de nombreux systèmes, ce sera /usr/local .

    AVERTISSEMENT : Si le chemin affiché est juste /usr , passer à Option 2 ou vous allez gâcher vos permissions.

  2. Changez le propriétaire des répertoires de npm au nom de l'utilisateur actuel (votre nom d'utilisateur) :

    sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

    Cela change les permissions des sous-dossiers utilisés par npm et certains autres outils ( lib/node_modules , bin et share ).

Option 2 : Changer le répertoire par défaut de npm pour un autre répertoire

Il y a des cas où vous ne voulez pas changer la propriété du répertoire par défaut que npm utilise (c'est à dire /usr ) car cela pourrait poser des problèmes, par exemple si vous partagez le système avec d'autres utilisateurs.

Au lieu de cela, vous pouvez configurer npm pour qu'il utilise un répertoire différent. Dans notre cas, il s'agira d'un répertoire caché dans notre dossier personnel.

  1. Créez un répertoire pour les installations globales :

    mkdir ~/.npm-global

  2. Configurez npm pour utiliser le nouveau chemin du répertoire :

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

  3. Ouvrez ou créez un ~/.profile et ajoutez cette ligne :

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

  4. De retour sur la ligne de commande, mettez à jour vos variables système :

    source ~/.profile

Test : Télécharger un paquet globalement sans utiliser sudo .

`npm install node-g.raphael --save`

Au lieu des étapes 2-4, vous pouvez utiliser la variable ENV correspondante (par exemple si vous ne voulez pas modifier ~/.profile ) :

NPM_CONFIG_PREFIX=~/.npm-global

Option 3 : utiliser un gestionnaire de paquets qui s'en occupe pour vous.

Si vous effectuez une nouvelle installation de Node sur Mac OS, vous pouvez éviter ce problème en utilisant l'option de configuration de Node. Homebrew gestionnaire de paquets. Homebrew met les choses en place dès le départ avec les permissions correctes.

brew install node

J'espère que cela vous aidera.

0 votes

Merci @Antz. J'ai dû faire la même chose à mes node_modules locaux, probablement parce que j'avais essayé d'installer node-g.raphael avec sudo. d'Oh ! Bien que j'ai maintenant un autre problème lié à xcode... Mais ce sera pour une autre question.

2 votes

Cette réponse m'a beaucoup aidé. Merci pour cette réponse bien rédigée et compréhensible. Une remarque, si vous utilisez la coquille de poisson et que vous utilisez l'option 1, vous devrez retirer l'élément $ dans la commande pour qu'elle se lise comme suit : sudo chown -R (whoami) (npm config get prefix)/{lib/node_modules,bin,share} Encore une fois, merci pour cette excellente réponse !

2 votes

J'ai essayé de faire les étapes de l'OPTION 2. Sur MacOS Catalina v10, le shell par défaut est ZSH qui utilise ~/.zprofile au lieu de ~/.profile. C'est pourquoi la configuration ci-dessus n'a pas fonctionné au début sur le terminal mais quand on utilise le shell BASH, cela a fonctionné. Vous pouvez trouver une description détaillée ici : superuser.com/a/187673

11voto

Jader Abreu Points 21

J'utilise :

  1. npm config get prefix
  2. sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
  3. sudo npm install

3voto

kiusau Points 21

Plutôt que de changer les permissions de vos fichiers et de risquer la confusion dans votre système (ce que j'ai fait et que je pourrais regretter plus tard), je vous suggère ce qui suit, que j'ai trouvé après coup.

Résolution des erreurs de permissions EACCES lors de l'installation globale de paquets

-7voto

Pankaj Garg Points 1

Pour y accéder sur Mac/Linux, il suffit d'utiliser cette commande

sudo npm install -g {package_name}

Et vous êtes prêt à partir.

0 votes

Si vous voulez installer une dépendance globalement dans votre Mac ou linux, vous devez utiliser sudo ou configurer manuellement dans les paramètres pour tous les paquets.

1 votes

-16voto

kemparaj565 Points 131

Problème résolu pour moi en exécutant la commande ci-dessous.

sudo npm install -g @angular/cli

J'ai pu installer Angular.

Essayez ensuite d'exécuter ng -v pour confirmer.

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