Question NPM renvoie une erreur sans sudo


Je viens d'installer node et npm à travers le paquet sur nodejs.org et chaque fois que j'essaie de chercher ou d'installer quelque chose avec npm, il renvoie l'erreur suivante, à moins que je ne fasse la commande sudo. J'ai le sentiment que c'est un problème d'autorisations? 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

1017
2018-04-22 15:35


origine


Réponses:


Cela ressemble à un problème d'autorisations dans votre répertoire personnel. Pour récupérer la propriété du .npm répertoire d'exécution:

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

1864
2018-04-22 16:11



Les autorisations que vous avez utilisées lors de l'installation de Node seront nécessaires lors de l'écriture de répertoire npm (npm link, npm install -g, etc.).

Vous avez probablement exécuté une installation de nœud avec des autorisations root, c'est pourquoi l'installation du package global vous demande d'être root.


Solution 1: NVM

Ne piratez pas avec les permissions, installez le nœud dans le bon sens.

Sur une machine de développement, vous ne devriez pas installer et exécuter un nœud avec des permissions root, sinon des choses comme npm link, npm install -g aura besoin des mêmes autorisations.

NVM (Node Version Manager) vous permet d'installer Node sans les permissions root et vous permet également d'installer de nombreuses versions de Node pour jouer facilement avec eux. Parfait pour le développement.

  1. Désinstaller le noeud (l'autorisation root sera probablement nécessaire). Ce pourrait vous aider.
  2. Puis installez NVM suivant les instructions sur cette page.
  3. Installez le noeud via la NVM: nvm install node

À présent npm link, npm install -g ne vous demandera plus d'être root.

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


Solution 2: installer des packages globalement pour un utilisateur donné

Ne piratez pas avec les permissions, installez globalement les paquets npm de la bonne façon.

Si vous êtes sur OSX ou Linux, vous pouvez créer un répertoire dédié utilisateur pour votre package global et l'installation npm et node savoir comment trouver des paquets installés dans le monde.

Check-out cet excellent article pour des instructions étape par étape sur l'installation de modules npm globalement sans sudo.

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


482
2018-06-25 09:05



Aussi, vous aurez besoin de la permission d'écriture dans node_modules annuaire:

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

386
2017-08-24 03:23



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

Lors de l'installation de la cavité:

-npm install recess -g
  1. Vous devez débloquer des autorisations dans votre home répertoire, comme Noé dit:

    sudo chown -R `whoami` ~/.npm
    
  2. Vous avez également besoin d'autorisations en écriture pour node_modules répertoire, comme Xilo dit, donc si ça ne marche toujours pas, essayez:

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

    sudo chown -R `whoami` /usr/local
    

S'il vous plaît noter que comme indiqué dans ce post  /usr/local/ n'est pas réellement un répertoire système si vous êtes sur un Mac, donc, cette réponse est en fait parfaitement "sûr" pour les utilisateurs de Mac. Cependant, si vous êtes sur Linux, voir Christopher WillLa réponse ci-dessous pour une solution multi-utilisateur, système dir sûre (mais plus complexe).


57
2017-10-03 23:16



Changer le propriétaire sur les dossiers "system-global" est un hack. Lors d'une nouvelle installation, je configurerais NPM pour utiliser un emplacement déjà accessible en écriture pour les programmes "user-global":

npm config set prefix ~/npm

Ensuite, assurez-vous d'ajouter ce dossier à votre chemin:

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

Voir @ErikAndreas' répondre à Les modules NPM ne s'installent pas globalement sans sudo  et guide étape par étape plus long par @sindresorhus avec aussi des ensembles $MANPATH.


49
2018-05-27 12:36



D'autres réponses suggèrent de changer les propriétaires ou les permissions des répertoires du système pour un utilisateur spécifique. Je déconseille fortement de le faire, cela peut devenir très gênant et peut gâcher tout le système!

Voici une approche plus générique et plus sûre qui prend également en charge les utilisateurs multiples.

Créez un nouveau groupe pour les utilisateurs de noeud et ajoutez les utilisateurs requis à ce groupe. Définissez ensuite la propriété des fichiers / répertoires dépendant du noeud sur ce groupe.

# Create new group
sudo groupadd nodegrp 

# Add user to group (logname is a variable and gets replaced by the currently logged in user)
sudo usermod -a -G nodegrp `logname`

# Instant access to group without re-login
newgrp nodegrp

# Check group - nodegrp should be listed as well now
groups

# Change group of node_modules, node, npm to new group 
sudo chgrp -R nodegrp /usr/lib/node_modules/
sudo chgrp nodegrp /usr/bin/node
sudo chgrp nodegrp /usr/bin/npm

# (You may want to change a couple of more files (like grunt etc) in your /usr/bin/ directory.)

Maintenant, vous pouvez facilement installer vos modules en tant qu'utilisateur

npm install -g generator-angular

Certains modules (grunt, bower, yo etc.) devront toujours être installés en tant que root. C'est parce qu'ils créent des liens symboliques dans / user / bin /.

modifier

3 ans plus tard, je recommande d'utiliser Gestionnaire de version de noeud. Cela vous donne beaucoup de temps et d'ennuis.


35
2018-01-09 11:58



le documentation officielle sur comment réparer npm install autorisations avec un EACCES l'erreur est située à https://docs.npmjs.com/getting-started/fixing-npm-permissions.

J'ai rencontré ce problème après une nouvelle installation de noeud en utilisant le .pkg programme d'installation sur OSX. Il y a quelques bonnes réponses ici, mais je n'ai pas encore vu de lien vers npmjs.com.

Option 1: modifiez l'autorisation du 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.

ATTENTION: Si le chemin affiché est juste / usr, basculer vers Option 2.

  1. 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 modifie les permissions des sous-dossiers utilisés par npm et d'autres outils (lib / node_modules, poubelle, et partager).

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

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

Au lieu de cela, vous pouvez configurer npm pour utiliser un répertoire différent. Dans notre cas, ce sera 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 de répertoire:

    npm config set prefix '~/.npm-global'
    
  3. Ouvrez ou créez un fichier ~ / .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
    

11
2018-01-23 19:46



Fais attention!!!  Fais attention!!!  Fais attention!!! 

chown ou chmod est NE PAS la solution, à cause du risque de sécurité.

Au lieu de cela, faites:

Vérifiez d'abord où npm pointe vers, si vous appelez:

npm config get prefix

Si / usr est renvoyé, vous pouvez effectuer les opérations suivantes:

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

Cela crée un npm-Direktory dans votre Home-Directory et pointe vers npm.

Pour obtenir ces changements permanents, vous devez ajouter la commande d'exportation à votre .bashrc:

echo -e "export NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=$PATH:~/.npm-global/bin" >> ~/.bashrc

11
2017-12-30 11:18



Comme si nous avions besoin de plus de réponses ici, mais de toute façon ..

Sindre Sorus a un guide Installez les paquets npm globalement sans sudo sur OS X et Linux décrivant comment installer proprement sans déranger avec les autorisations:

Voici un moyen d'installer des paquets globalement pour un utilisateur donné.

  1. Créez un répertoire pour vos paquets globaux

    mkdir "${HOME}/.npm-packages"
    
  2. Référence ce répertoire pour une utilisation future dans votre .bashrc / .zshrc:

    NPM_PACKAGES="${HOME}/.npm-packages"
    
  3. Indiquez à npm où stocker votre paquet installé globalement. Dans ton $HOME/.npmrc fichier ajouter:

    prefix=${HOME}/.npm-packages
    
  4. Assurez-vous que le noeud les trouvera. Ajoutez ce qui suit à votre fichier .bashrc / .zshrc:

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
    
  5. Assurez-vous de trouver les binaires installés et les pages de manuel. Ajoutez ce qui suit à votre .bashrc/.zshrc:

    PATH="$NPM_PACKAGES/bin:$PATH"
    # Unset manpath so we can inherit from /etc/manpath via the `manpath`
    # command
    unset MANPATH # delete if you already modified MANPATH elsewhere in your config
    MANPATH="$NPM_PACKAGES/share/man:$(manpath)"
    

Check-out npm-g_nosudo pour faire les étapes ci-dessus automagically

Vérifiez source de ce guide pour les dernières mises à jour.


10
2018-01-20 09:35