web-dev-qa-db-fra.com

nPM génère une erreur sans sudo

Je viens d'installer node et npm via le paquet sur nodejs.org et chaque fois que j'essaie de rechercher ou d'installer quelque chose avec npm, l'erreur suivante est générée, à moins que je ne suive la commande. J'ai l'impression qu'il s'agit d'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
1082
Chad

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

Sudo chown -R $(whoami) ~/.npm
1955
Noah

Les autorisations que vous avez utilisées lors de l'installation de Node seront nécessaires pour des tâches telles que l'écriture dans votre répertoire npm} _ (npm link, npm install -g, etc.).

Vous avez probablement exécuté l'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 correctement le noeud.

Sur un ordinateur de développement, vous ne devez pas installer et exécuter de nœud avec des autorisations root. Sinon, des éléments comme npm link, npm install -g auront besoin des mêmes autorisations.

NVM (Node Version Manager) vous permet d'installer Node sans autorisations root et vous permet également d'installer de nombreuses versions de Node pour pouvoir les utiliser facilement. Parfait pour le développement.

  1. Désinstallez Node (l’autorisation root sera probablement requise). Ceci pourrait vous aider.
  2. Ensuite, installez NVM en suivant les instructions sur cette page .
  3. Installer le nœud via NVM: nvm install node

Maintenant, npm link, npm install -g ne vous obligera plus à ê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 les paquets npm globalement de la bonne manière.

Si vous êtes sur OSX ou Linux, vous pouvez créer un répertoire utilisateur dédié à votre paquet global et configurer npm et node pour savoir comment trouver les paquets installés globalement.

Consultez ce bel article pour des instructions étape par étape sur l'installation de modules npm globalement sans Sudo.

Voir aussi: la documentation de npm sur Fixation des autorisations npm .

519
Yves M.

De plus, vous aurez besoin de l'autorisation d'écriture dans le répertoire node_modules

Sudo chown -R $USER /usr/local/lib/node_modules
382
Xilo

Je l’ai rencontré lors de l’installation de Recess ( https://github.com/Twitter/recess ) pour compiler mon CSS pour Bootstrap 3.

Lors de l'installation de la récréation:

-npm install recess -g
  1. Vous devez déverrouiller les autorisations dans votre répertoire home, comme Noah

    Sudo chown -R `whoami` ~/.npm
    
  2. Vous devez également disposer d'autorisations d'écriture sur le répertoire node_modules, comme Xilo , Ce qui signifie que s'il ne fonctionne toujours pas, essayez:

    Sudo chown -R `whoami` /usr/local/lib/node_modules
    
  3. Si vous voyez toujours des erreurs, vous devrez peut-être aussi corriger les autorisations /usr/local :

    Sudo chown -R `whoami` /usr/local
    

Veuillez noter que comme indiqué dans ce message/usr/local/ n'est pas réellement un répertoire système si vous êtes sur un Mac, cette réponse est donc parfaitement "sûre" pour les utilisateurs Mac. Toutefois, si vous êtes sous Linux, reportez-vous à la réponse de Christopher Will ci-dessous pour une solution conviviale et sécurisée pour plusieurs utilisateurs (mais plus complexe). 

54
danomarr

Changer le propriétaire des dossiers "global-system" est un hack. Lors d'une nouvelle installation, je configurerais NPM pour qu'il utilise un emplacement déjà inscriptible pour les programmes "utilisateur global":

npm config set prefix ~/npm

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

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

Voir @ErikAndreas ' answer to Les modules NPM ne s'installeront pas globalement sans Sudo et guide pas à pas plus long de @sindresorhus avec également la valeur $MANPATH.

54
Joel Purra

D'autres réponses suggèrent de modifier les droits de propriété ou les autorisations des répertoires système sur 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 le multi-utilisateur.

Créez un nouveau groupe pour les utilisateurs de noeud et ajoutez les utilisateurs requis à ce groupe. Puis définissez la propriété des fichiers/répertoires dépendants du nœud 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. En effet, ils créent des liens symboliques dans/user/bin /.

Modifier

3 ans plus tard, je vous recommande d'utiliser Node Version Manager . Cela vous épargne beaucoup de temps et d'ennuis.

35
Christopher Will

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

chown ou chmod estPASla solution, à cause du risque de sécurité.

Au lieu de cela, faites:

Commencez par vérifier où se trouve npm si vous appelez:

npm config get prefix

Si/usr est renvoyé, vous pouvez procéder comme suit:

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

Cela crée un répertoire npm-Direktory dans votre répertoire de base et pointez-le sur npm.

Pour que ces modifications soient permanentes, vous devez ajouter la commande export à votre fichier .bashrc:

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

La documentation officielle sur la façon de corriger les autorisations npm install avec une erreur EACCES se trouve à https://docs.npmjs.com/getting-started/fixing-npm-permissions

J'ai rencontré ce problème après une nouvelle installation de noeud à l'aide du programme d'installation .pkg sous OSX. Il y a d'excellentes réponses ici, mais je n'ai pas encore vu de lien vers npmjs.com.

Option 1: Change l'autorisation en répertoire par défaut de npm

  1. Trouvez le chemin d'accès au répertoire de npm:

    npm config get prefix
    

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

WARNING: Si le chemin affiché est uniquement / usr, passez à Option 2.

  1. Remplacez le propriétaire des répertoires de npm par le 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 autorisations des sous-dossiers utilisés par npm et certains autres outils (lib/node_modules, bin et share).

Option 2: change le répertoire par défaut de npm en un autre répertoire

Il arrive que vous ne souhaitiez pas modifier la propriété du répertoire par défaut utilisé par npm (c'est-à-dire / usr), car cela pourrait entraîner 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 complètement 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
    
15
HoppyKamper

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 sous OS X et Linux décrivant comment installer proprement sans nuire aux autorisations: 

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

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

    mkdir "${HOME}/.npm-packages"
    
  2. Référencez 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 votre fichier $HOME/.npmrc, ajoutez:

    prefix=${HOME}/.npm-packages
    
  4. Assurez-vous que le noeud les trouvera. Ajoutez les éléments suivants à votre fichier .bashrc/.zshrc:

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
    
  5. Assurez-vous de trouver les fichiers binaires et les pages de manuel installés. Ajoutez les éléments suivants à 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)"
    

Consultez npm-g_nosudo pour effectuer les étapes ci-dessus de manière automatique.

_/Commander le source de ce guide pour les dernières mises à jour.

11
ptim

Lorsque vous exécutez npm install -g somepackage, vous pouvez obtenir une erreur EACCES vous demandant de réexécuter la commande en tant que root/administrateur. C'est un problème d'autorisations.

C'est facile à réparer, ouvrez votre terminal (Applications> Utilitaires> Terminal)

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

** Je vous recommande fortement de ne pas utiliser la gestion des paquets avec Sudo (Sudo npm -g install quelque chose), car vous pourrez résoudre certains problèmes ultérieurement **

Référence: http://foohack.com/2010/08/intro-to-npm/

8

TL; DR

utilisez toujours Sudo -i ou Sudo -H lors de l'exécution de npm install pour installer des packages globaux.

-

Lorsque vous utilisez npm, les packages sont téléchargés dans votre répertoire de base utilisateur. Lorsque vous vous exécutez en tant que Sudo, npm installe les fichiers dans le même répertoire, mais ils appartiennent maintenant à root.

C'est donc ce qui arrive à chaque personne qui a déjà utilisé npm:

  • installer des paquets locaux sans problème en utilisant npm install foo
  • installer le paquet global en utilisant Sudo install -g foo-cli sans problème
  • tenter d'installer le paquet local avec npm install bar
  • soyez frustré par les concepteurs npm maintenant que vous devez accéder à nouveau à chmod

Lorsque vous utilisez l'option -i ou -H avec Sudo, votre répertoire personnel sera le répertoire personnel de root. Toutes les installations globales mettront en cache les packages dans /root/.npm au lieu de root- fichiers appartenant à /home/me/.npm.

Utilisez toujours Sudo -i ou Sudo -H lors de l'exécution de npm install pour installer des packages globaux, et vos problèmes d'autorisations npm disparaîtront.

Pour de bon.

http://hood.ie/blog/why-you-shouldnt-use-Sudo-with-npm.html

--q.v. la réponse acceptée pour réparer une npm déjà baisée.

8
rich remer

Pour Mac (extrait de la réponse de Christoper Will)

Mac OS X 10.9.4 

  1. Préférences système> Utilisateurs et groupes> (déverrouiller)> appuyez sur +: 

    Nouveau compte> "Groupe"
    Nom du compte: nodegrp 

    Après avoir créé le groupe, cochez l'utilisateur à inclure dans ce groupe.

  2. Sudo chgrp -R nodegrp/usr/local/lib/node_modules /
    Sudo chgrp nodegrp/usr/bin/node
    Sudo chgrp nodegrp/usr/bin/npm
    Sudo chown -R $ (whoami): nodegrp ~/.npm

6
ken

Dans mon cas, c'est à cause de la permission de ~/tmp.So je fais:

Sudo chown -R $USER ~/tmp

Et c'est bon!

5
bnPYSse

J'ai eu un problème similaire à Les modules de NPM ne seront pas installés globalement sans Sudo , le problème était que quand j'ai installé le nœud, je l'ai fait avec Sudo via chris/lea ppa repo.

Ma solution consistait à désinstaller le noeud, puis à l'installer de la manière suivante:

Téléchargez les dernières sources de noeuds stables à partir de nodejs.org #in mon cas, node-v0.10.20.tar.gz

tar -zxf node-v0.10.20.tar.gz #incompresser les sources

cd node-v0.10.20 #enter dossier non compressé

Sudo chown $ USER -R/usr/local

./configure --prefix =/usr/local && make && make install

PD: Si vous ne souhaitez pas modifier la propriété du dossier/usr/local, vous pouvez l’installer quelque part que vous possédez déjà. Le problème de cette approche est que vous devrez lier le dossier d’installation avec la ligne de commande bash pour pouvoir utiliser la commande node ultérieurement.

mkdir ~/opt

./configure --prefix = ~/opt && make && make install

echo 'export PATH = ~/opt/bin: $ {PATH}' >> ~/.bashrc #ou ~/.profile ou ~/.bash_profile ou ~/.zshenv en fonction du système d'exploitation actuel

Avec l’une ou l’autre de ces approches, vous pourrez effectuer les opérations suivantes sans utiliser Sudo.

npm install -g module_to_install

5
HeberLZ

Au cas où Sudo chown -R $(whoami) ~/.npm ne fonctionnerait pas pour vous ou si vous avez besoin d’une solution de commande non terminale.

Le problème est que votre compte d'utilisateur n'a pas l'autorisation d'écriture dans le dossier node_modules. Vous pouvez donc effectuer les opérations suivantes: 

  1. Ouvrez le Finder et appuyez sur cmd + shift + g ceci ouvrira le dossier Aller au dossier avec l'URL.

  2. Écrivez le chemin suivant /usr/local/lib/node_modules et appuyez sur go

  3. Faites un clic droit sur le dossier node_modules et choisissez Get Info

  4. Faites défiler jusqu'à la section sharing & permissions

  5. Déverrouiller pour pouvoir apporter des modifications.

  6. Appuyez sur + et ajoutez votre compte utilisateur. 

  7. Assurez-vous de choisir Read & Write dans la liste déroulante des privilèges

Maintenant, vous devriez pouvoir installer des paquets sans Sudo et les problèmes de permission devraient être résolus 

3
Amr Labib

Pour moi, n'exécute que

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

ne fonctionne pas. Ensuite, j'exécute aussi

Sudo chown -R $(whoami) /usr/lib/node_modules/
Sudo chown -R $(whoami) /usr/bin/node
Sudo chown -R $(whoami) /usr/bin/npm

Et tout fonctionne bien!

3
user3753202

Voici comment j'ai résolu le problème sous Windows 8.1:

  • Accédez à votre installation nodejs (généralement C:\Program Files\nodejs)
  • Faites un clic droit sur le dossier node_modules et allez dans les propriétés
  • Cliquez sur l'onglet Sécurité et avancé
  • En haut, vous verrez "Propriétaire: Système", cliquez sur Modifier.
  • Entrez l'utilisateur pour lequel vous souhaitez obtenir des autorisations, puis cliquez sur OK.
  • Cochez la case au bas des paramètres avancés "Remplacer toutes les entrées d'autorisation d'objet enfant par des entrées d'autorisation pouvant être héritées de cet objet" et cliquez sur ok
  • Faites ce que npm installe/met à jour dont vous avez besoin
2
KCaradonna

Sous Mac OS X, lors de l’installation avec Homebrew -brew install npm, le chemin d’installation est /usr/local/share/npm/ avec les sous-dossiers bin/ et lib/node_modules/.

L'exécution de cette commande pour changer de propriétaire en votre utilisateur actuellement connecté devrait tout régler et vous permettre d'installer des packages NPM globaux sans Sudo.

Sudo chown -R $USER ~/.npm /usr/local/share/npm/

osxhomebrew

2
Joel Purra

Problème: Vous n’avez pas l’autorisation d’écrire dans les répertoires que npm utilise pour stocker les packages et les commandes globaux.

Solution: Autorisez l’autorisation pour npm.

Ouvrez un terminal:

commande + barre d'espace puis tapez 'terminal'

Entrez cette commande: 

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

  • Remarque: cela nécessitera votre mot de passe.

Cette solution autorise uniquement les répertoires nécessaires, en gardant les autres répertoires agréables et sûrs.

2
Matt

ISSUE: vous (l'utilisateur) ne disposez pas du bon ensemble d'autorisations pour le répertoire.

La solution immédiate consiste à exécuter l’installation de npm à l’aide de Sudo, mais cela peut vous donner la même erreur ou une installation incorrecte.

ET changer de propriétaire de répertoire n'est pas une bonne option, un correctif temporaire.


Solution/Suggestion: Changer le répertoire par défaut de npm (à partir de docs officiel)

Sauvegardez votre ordinateur avant d'aller de l'avant.

(facultatif) Si vous avez une installation erronée, commencez par la désinstaller:

npm uninstall <package-name>  # use Sudo if you used it while installation
npm cache verify  # or, npm cache clean for npm version below 5.x.x 
  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 ou ~/.bash_profile et ajoutez cette ligne: 

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

  4. Revenez sur la ligne de commande, mettez à jour vos variables système ou redémarrez le terminal: 

    source ~/.profile

  5. (facultatif) Test: Téléchargez un package globalement sans utiliser Sudo.

    npm install -g jshint

2
Nabeel Ahmed

Si quelque chose comme ci-dessous apparaît pendant l'installation de npm ou si vous souhaitez installer des packages globalement sur un Mac, utilisez Sudo

npm ERR! code EACCES
npm ERR! errno -13
npm ERR! accès syscall

1
Ignatius Andrew

En fait, j'avais aussi le même problème. Je courais Ubuntu. Le problème mien se pose parce que j'avais perdu ma clé publique d'Ubuntu. Même la mise à jour de mon système ne se produisait pas. Cela donnait une erreur à GPG. Dans ce cas, vous pouvez récupérer votre clé en utilisant cette commande:

Sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <key in GPG error>

Après cela npm fonctionne bien!

1
sam100rav

John Papa pointe l'historique et le raisonnement derrière ce problème et donne une solution solide :

Les étapes de John Papa sont les suivantes: 

  1. Utilisez Brew pour installer le noeud sans NPM
  2. Mettez à jour votre fichier .bash_profile/.bashrc pour que npm et le noeud sachent où installer et trouver les packages.
  3. Utilisez brew pour mettre à jour le noeud et npm pour se mettre à jour

J'espère que cela aide les curieux!

1
theship

La réponse de @Yves M. était très similaire à ma solution. Voici les commandes que j'ai utilisées, qui étaient légèrement différentes des siennes.

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash

Ensuite, recherchez la dernière version:

nvm ls-remote

Puis installez la nouvelle version:

nvm install YOUR_VERSION_HERE

exemple

nvm install v5.8.0
0
Ryan Loggerythm

Je le résous en changeant le propriétaire de la racine en mon nom d'utilisateur

Sudo chown -R me:me /home/me/.config/configstore/

changez-moi avec votre nom d'utilisateur et votre groupe.

0
Salem

Voici les étapes, en détail ...

  • Installez Node.js à partir de nodejs.org/en/download

  • Mise à jour vers la dernière version de npm: $ npm install npm -g

  • Créez un nouveau dossier pour les packages globaux npm$ mkdir ~/.npm-packages

  • Dites npm où les trouver/les stocker $ npm config set prefix ~/.npm-packages

Vérifier l'installation

# this should show the versions
node -v  
npm -v  
# this should show npm and ng with no errors
npm list -g --depth=0

J'espère que cela fonctionne pour vous, cela a fonctionné pour moi!

0
Carlos Abraham

Si le changement des autorisations pour directory /usr/local/lib/npm_modules Not aide, vous devez ajouter votre utilisateur au groupe (dans la plupart des cas, il s'agit du groupe staff), qui dispose des droits rwx pour /usr/bin directory . Parce que npm tente de créer symlink avec /usr/bin/__package__.

P.S. N'oubliez pas de vous reconnecter après avoir changé de groupe d'utilisateurs

0
Victor Perov

C'est la solution que j'ai utilisée et travaillée. J'ai essayé d'utiliser whoami n'a jamais fonctionné.

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

puis

Sudo chown -R $USER /usr/local/bin/npm

puis

Sudo chown -R $USER /usr/local/bin/node

0
Casey Robinson

Ce qui me semble être la meilleure option est celle suggérée dans la documentation npm }, qui vérifie d’abord où les nœuds_modules globaux sont installés par défaut en exécutant npm config get prefix. Si vous obtenez, comme je le fais sur Trusty, /usr, vous voudrez peut-être le changer en un dossier que vous pouvez posséder en toute sécurité sans gâcher les choses de la façon dont je l’ai fait.

Pour ce faire, choisissez ou créez un nouveau dossier dans votre système. Vous voudrez peut-être l'avoir dans votre répertoire personnel ou, comme moi, sous /usr/local par souci de cohérence, car je suis également un utilisateur Mac (je préfère ne pas avoir à chercher à des endroits différents selon la machine devant laquelle je me trouve) . Une autre bonne raison de le faire est le fait que le dossier /usr/local se trouve probablement déjà dans votre PATH (sauf si vous aimez jouer avec votre PATH), mais il est fort probable que votre nouveau dossier ne soit pas créé et que vous deviez l'ajouter à le CHEMIN vous-même sur votre fichier .bash-profile ou .bashrc.

En résumé, j'ai changé l'emplacement par défaut des modules globaux avec npm config set prefix '/usr/local', créé le dossier /usr/local/lib/node_modules (il sera utilisé par npm) et modifié les autorisations des dossiers utilisés par npm avec la commande: 

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

Maintenant, vous pouvez installer globalement n'importe quel module en toute sécurité. J'espère que cela t'aides!

0
yago

tu pourrais essayer ça 

Sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
0
Adeojo Emmanuel IMM

Une autre bonne solution ici pour configurer NPM correctement, exécutez les commandes suivantes:

npm config set prefix '~/.npm_packages'
PATH=$PATH:$HOME/.npm_packages/bin; export PATH
0
Guillaume Le Mière