npm lance l'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 lance l'erreur suivante, à moins que je sudo la commande. J'ai le sentiment que c'est un problème d'autorisations? Je suis déjà admin.
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
30 réponses
cela ressemble à un problème de permissions dans votre répertoire personnel. Récupérer la propriété du .mnp répertoire de l'exécuter:
sudo chown -R $(whoami) ~/.npm
que vous avez utilisées lors de L'installation de Node seront nécessaires pour écrire dans votre répertoire npm ( npm link
, npm install -g
, etc.).
vous avez probablement lancé l'installation de noeuds avec les permissions root, c'est pourquoi l'installation globale du paquet vous demande d'être root.
Solution 1: NVM
Ne pas hack avec des autorisations, nœud installer le droit chemin.
sur une machine de développement, vous ne devez pas installer et exécuter un noeud avec des permissions racine, sinon des choses comme npm link
, npm install -g
auront besoin des mêmes permissions.
NVM (Node Version Manager) vous permet d'installer Node sans permissions root et vous permet également d'installer de nombreuses versions de Node pour jouer facilement avec eux.. Parfait pour le développement.
- Désinstaller Nœud racine de l'autorisation sera probablement nécessaire). ce pourrait vous aider.
- puis installer NVM instructions suivantes sur cette page .
- Install Node via NVM:
nvm install node
maintenant npm link
, npm install -g
n'aura plus besoin de vous pour être root.
modifier: Voir aussi https://docs.npmjs.com/getting-started/fixing-npm-permissions
Solution 2: Installer des paquets globalement pour un utilisateur donné
ne pas hacker avec les permissions, installer 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é pour votre paquet global et setup npm
et node
pour savoir comment trouver les paquets globalement installés.
Check out ce grand article pour des instructions étape par étape sur l'installation des modules npm globalement sans sudo.
Voir aussi: mnp documentation sur Fixation mnp autorisations .
vous aurez aussi besoin de la permission d'écriture dans node_modules
répertoire:
sudo chown -R $USER /usr/local/lib/node_modules
Je l'ai rencontré lors de l'installation de la suspension ( https://github.com/twitter/recess ) pour compiler mon CSS pour Bootstrap 3.
lors de l'installation de la suspension:
-npm install recess -g
-
vous devez débloquer les permissions dans votre répertoire
home
, comme Noah dit:sudo chown -R `whoami` ~/.npm
-
vous avez également besoin de permissions d'écriture à la
node_modules
répertoire, comme Xilo dit, donc si cela ne fonctionne toujours pas, essayez:sudo chown -R `whoami` /usr/local/lib/node_modules
-
si vous voyez encore des erreurs, vous pouvez aussi avoir besoin de corriger
/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 système de dir si vous êtes sur un Mac, donc, cette réponse est en fait parfaitement "sûre" pour les utilisateurs Mac. Cependant, si vous êtes sous Linux, voir Christopher Will 'S réponse ci-dessous pour un multi-utilisateur Facile, Système dir sûr (mais plus complexe) solution.
changer le propriétaire sur les dossiers "système-global" est un piratage. Sur 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éponse à NPM modules ne pas installer partout dans le monde sans sudo
et plus guide étape par étape par @sindresorhus avec aussi des sets $MANPATH
.
D'autres réponses suggèrent de changer la propriété ou les permissions des répertoires système à un utilisateur spécifique. Je déconseille fortement de le faire, cela peut devenir très embarrassant et pourrait gâcher tout le système!
Voici une approche plus générique et plus sûre qui prend en charge multi-utilisateur ainsi.
crée un nouveau groupe pour les utilisateurs de noeuds et ajoute les utilisateurs requis à ce groupe. Ensuite, définissez la propriété des fichiers/répertoires dépendants des noeuds à ceci 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.) devra toujours être installé comme root. C'est parce qu'ils créent des liens symboliques dans /user/bin/.
Modifier
3 ans plus tard, je recommande d'utiliser Node Version Manager . Il coffres-vous beaucoup de temps et d'ennuis.
attention!!! attention!!! attention!!!
chown ou chmod est PAS la solution, en raison de la sécurité-risque.
au lieu de cela faire ceci, faire:
premier contrôle, où npm pointer, si vous appelez:
npm config get prefix
si / usr est retourné, vous pouvez faire ce qui suit:
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 y pointe npm.
pour obtenir ce changement permanent, vous devez ajouter la commande export à votre .bashrc:
echo -e "export NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=$PATH:~/.npm-global/bin" >> ~/.bashrc
la documentation officielle sur la façon de fixer npm install
permissions 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 node avec l'installateur .pkg
sur OSX. Il y a de bonnes réponses ici, mais je n'ai pas vu de lien vers npmjs.com pas encore.
Option 1: Modifier la permission dans le répertoire par défaut de la npm
-
trouvez le chemin d'accès au répertoire de la npm:
npm config get prefix
pour de nombreux systèmes, ce sera /usr/local .
avertissement : si le chemin affiché est juste /usr , passez à Option 2 .
-
changer le propriétaire des répertoires de la npm au nom de l'utilisateur courant (votre nom d'utilisateur!):
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
modifie 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 à 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 la npm utilise (i.e. /usr ) car cela pourrait causer des problèmes, par exemple si vous partagez le système avec d'autres utilisateurs.
à la place, 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 d'accueil.
-
créer un répertoire pour les installations globales:
mkdir ~/.npm-global
-
Configurer les mnp à utiliser le nouveau chemin d'accès au répertoire:
npm config set prefix '~/.npm-global'
-
ouvrir ou créer un ~/.fichier de profil et ajouter cette ligne:
export PATH=~/.npm-global/bin:$PATH
-
de retour sur la ligne de commande, mettez à jour vos variables système:
source ~/.profile
comme si nous avions besoin de plus de réponses ici, mais de toute façon..
Sindre Sorus a un guide installer les paquets npm globalement sans sudo sur OS X et Linux soulignant comment installer proprement sans toucher aux permissions:
Voici une façon d'installer des paquets globalement pour un utilisateur donné.
créez un répertoire pour vos paquets globaux
mkdir "${HOME}/.npm-packages"
référence ce répertoire pour usage futur dans votre .bashrc/.zshrc:
NPM_PACKAGES="${HOME}/.npm-packages"
indiquer au npm où stocker votre paquet installé à l'échelle mondiale. Dans votre fichier
$HOME/.npmrc
ajouter:prefix=${HOME}/.npm-packages
assurez-vous que le noeud les trouvera. Ajoutez ce qui suit à votre .bashrc/.zshrc:
NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
assurez-vous de trouver les binaires et les pages de manuel installés. Ajouter 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 automagiquement
consultez la source de ce guide pour les dernières mises à jour.
lorsque vous exécutez npm install-g somepackage, vous pouvez obtenir une erreur EACCES vous demandant d'exécuter la commande à nouveau en tant que root/Administrator. C'est un problème d'autorisations.
Il est facile à fixer , 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 something), parce que vous pouvez obtenir quelques problèmes plus tard * *
référence: http://foohack.com/2010/08/intro-to-npm /
Pour Mac (adopté de Christoper Sera la réponse de l')
Mac OS X 10.9.4
-
Préférences Système > Utilisateurs Et Groupes > (déverrouiller) > appuyez sur la touche + :
Nouveau Compte > "Groupe "
Nom de Compte: nodegrpaprès avoir créé le groupe, cochez l'utilisateur à inclure dans ce groupe
-
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
TL; DR
utilisez toujours
sudo -i
ousudo -H
lorsque vous lanceznpm install
pour installer des paquets globaux.
--
lorsque vous utilisez npm
, il télécharge des paquets dans votre répertoire personnel. Lorsque vous utilisez sudo, npm
installe les fichiers dans le même répertoire, mais ils sont maintenant détenus par root.
donc c'est ce qui arrive à absolument chaque personne célibataire ayant déjà utilisé npm
:
- installer certains paquets locaux sans problème en utilisant
npm install foo
- install package global à l'aide de
sudo install -g foo-cli
sans problème - tentative d'installation du paquet local avec
npm install bar
- être frustré par le
npm
concepteurs maintenant que vous devez allerchmod
un répertoire à nouveau
quand vous utilisez l'option -i
ou -H
avec sudo, votre répertoire personnel sera le répertoire personnel de root
. Toute installation globale mettra en cache les paquets vers /root/.npm
au lieu des fichiers root
détenus par /home/me/.npm
.
utilisez toujours sudo -i
ou sudo -H
lorsque vous lancez npm install
pour installer des paquets globaux et vos problèmes de permissions npm
disparaîtront.
pour de bon.
http://hood.ie/blog/why-you-shouldnt-use-sudo-with-npm.html
--
voir les accepté de répondre pour la fixation d'un déjà baisé npm
.
j'ai eu un problème similaire à modules NPM ne sera pas installer globalement sans sudo , le problème était que lorsque j'ai installé noeud Je l'ai fait avec sudo via chris/lea PPA repo .
ma solution était de désinstaller node et puis l'installer de cette façon:
Télécharger les dernières sources de noeuds stables à partir nodejs.org # in my case node-v0.10.20.tar.GZ
tar-zxf noeud-v0.10.20.tar.gz #décompresser les sources
cd nœud-v0.10.20 #entrer un dossier non compressé
sudo chown $USER-R/usr / local
./ configure --prefix= / usr / local & & make & & make install
PD: si vous ne voulez pas changer la propriété du dossier /usr/local, vous pouvez l'installer quelque part où vous possédez déjà. Le problème de cette approche est que vous aurez à lier l'installation dossier avec la ligne de commande bash pour que nous puissions utiliser la commande node plus tard sur
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 opérationnel actuel
Avec l'une de ces approches, vous serez en mesure de faire ce qui suit sans utiliser sudo
npm install-g module_to_install
dans mon cas,c'est à cause de la permission de ~/tmp.C'est ce que je fais:
sudo chown -R $USER ~/tmp
et C'est bon!
Pour moi, exécuter uniquement
sudo chown -R $(whoami) ~/.npm
ne marche pas. Puis, 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!
problème: Vous n'avez pas la permission d'écrire dans les répertoires que la npm utilise pour stocker des paquets et des commandes globales.
Solution: Autoriser pour les mnp.
ouvrir un terminal:
commande + barre d'espace, puis tapez "terminal"
entrez cette commande:
sudo chown -R $(whoami) $(mnp config obtenir préfixe)/{lib/node_modules,bin,action}
- Note: Ceci nécessitera votre mot de passe.
cette solution permet d'Autoriser seulement les répertoires nécessaires, en gardant les autres répertoires agréables et sûrs.
sur Mac OS X, lors de l'installation avec Homebrew brew install npm
, le chemin d'installation est /usr/local/share/npm/
avec à la fois bin/
et lib/node_modules/
sous-dossiers.
exécuter cette commande pour changer de propriétaire à votre utilisateur actuellement connecté devrait corriger tout cela, et vous permettre d'installer des paquets NPM globaux sans sudo
.
sudo chown -R $USER ~/.npm /usr/local/share/npm/
Voici comment j'ai résolu le problème sur Windows 8.1:
- allez à votre installation nodejs (habituellement C:\Program Files\nodejs)
- clic droit sur le dossier node_modules et aller aux 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 voulez des permissions et cliquez sur Ok
- Vérifier le boîte en bas des paramètres avancés "remplacer toutes les entrées de permission d'un objet enfant par des entrées de permission héritées de cet objet" et cliquer ok
- faire tout ce que npm installer/mettre à jour vous avez besoin
dans le cas sudo chown -R $(whoami) ~/.npm
n'a pas fonctionné pour vous, ou vous avez besoin d'une solution de commande non-terminal.
le problème est que votre compte d'utilisateur n'a pas la permission d'écrire dans le dossier node_modules, vous pouvez donc faire ce qui suit""
-
Ouvrez le finder et appuyez sur
cmd
+shift
+g
cela va ouvrir aller au dossier avec l'url -
écrivez le chemin suivant
/usr/local/lib/node_modules
et appuyez sur go -
clic droit sur
node_modules
dossier et choisirGet Info
-
Faites défiler vers le bas jusqu'à
sharing & permissions
section -
déverrouiller pour pouvoir faire des changements.
-
appuyez sur
+
et ajoutez votre compte d'utilisateur -
assurez-vous que vous choisissiez
Read & Write
dans la baisse de privilège
Maintenant, vous devriez être en mesure d'installer des paquets sans sudo
et les problèmes de permission devraient être résolus
en fait, j'avais aussi le même problème. Je dirigeais Ubuntu. Mon problème se pose parce que j'ai perdu ma clé publique de L'Ubuntu. Même la mise à jour de mon système ne se produisait pas. Il donnait une erreur de 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 que npm fonctionne très bien!
John Papa souligne l'histoire et le raisonnement derrière cette question et donne une solution solide :
John Papa étapes sont les suivantes:
- Utilisation de brew à installer nœud sans mnp
- mettez à jour votre .bash_profile/.bashrc pour laisser mnp et le nœud de savoir où installer et de trouver les paquets
- utiliser brew pour mettre à jour node et npm pour se mettre à jour
Hope cela aide les curieux!
si quelque chose comme ci-dessous apparaît pendant l'installation npm ou si vous voulez installer des paquets globalement sur un Mac utiliser Sudo
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! accès syscall 151910920"
ISSUE : vous (l'utilisateur) n'avez pas le bon jeu de permissions pour le répertoire.
la sortie instantanée est d'exécuter l'installation npm en utilisant 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 (de docs )
Sauvegardez votre ordinateur avant d'aller de l'avant.
(optionnel) dans le cas où vous avez une installation erronée, désinstallez d'abord:
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
-
créer un répertoire pour les installations globales:
mkdir ~/.npm-global
-
Configurer les mnp à utiliser le nouveau chemin d'accès au répertoire:
npm config set prefix '~/.npm-global'
-
ouvrir ou créer un fichier
~/.profile
ou~/.bash_profile
et ajouter cette ligne:export PATH=~/.npm-global/bin:$PATH
-
de retour sur la ligne de commande, Mettre à jour vos variables système, ou redémarrer le terminal:
source ~/.profile
-
(facultatif) essai: télécharger un colis globalement sans utiliser sudo.
npm install -g jshint
si vous changez les permissions pour directory /usr/local/lib/npm_modules
pas d'aide, u devrait ajouter votre utilisateur au groupe (dans la plupart des cas c'est le groupe staff
), qui a des droits rwx pour le répertoire /usr/bin
.
Parce que npm essaie de faire symlink
avec /usr/bin/__package__
.
P.S. N'oubliez pas de relogin après avoir changé de groupe d'utilisateurs
C'est la solution que j'ai utilisée et travaillé. 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
un autre grand correctif ici pour configurer NPM correctement, exécutez les commandes suivantes:
npm config set prefix '~/.npm_packages'
PATH=$PATH:$HOME/.npm_packages/bin; export PATH
@Yves M. La réponse était très similaire à ma solution. Voici les commandes que j'ai utilisées, qui étaient légèrement différentes de la sienne.
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash
alors rechercher la dernière version:
nvm ls-remote
puis installer la dernière version:
nvm install YOUR_VERSION_HERE
exemple
nvm install v5.8.0
ce qui me semble être la meilleure option est celle suggérée dans la documentation npm , qui est de vérifier d'abord où global node_modules sont installés par défaut en exécutant npm config get prefix
. Si vous obtenez, comme je le fais sur Trusty, /usr
, vous pourriez vouloir le changer à 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 pouvez l'avoir dans votre Home directory ou, comme moi, sous /usr/local
pour la cohérence car je suis aussi un utilisateur Mac (je préfère ne pas avoir à chercher à différents endroits en fonction de la machine devant laquelle je me trouve). Une autre bonne raison de faire cela est le fait que le dossier /usr/local
est probablement déjà dans votre chemin (à moins que vous aimiez jouer avec votre chemin) mais il y a des chances que votre dossier nouvellement créé ne l'est pas et vous auriez besoin de l'ajouter au chemin vous-même sur votre .profil bash ou .bashrc "1519130920 de fichier".
pour faire court, 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 permissions pour les dossiers utilisés par npm avec la commande:
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
Maintenant vous pouvez globalement installer n'importe quel module en toute sécurité. Espérons que cette aide!
Je ne prends aucun crédit pour cette solution. Remerciez ce type: https://gist.github.com/isaacs/579814
# take ownership of the folders that npm/node use
# please don't do this if you don't know what it does!
sudo mkdir -p /usr/local/{share/man,bin,lib/node,include/node}
sudo chown -R $USER /usr/local/{share/man,bin,lib/node,include/node}
# now just a pretty vanilla node install
# let it use the default paths, but don't use sudo, since there's no need
mkdir node-install
curl http://nodejs.org/dist/node-v0.4.3.tar.gz | tar -xzf - -C node-install
cd node-install/*
./configure
make install
# now the npm easy-install
curl https://www.npmjs.org/install.sh | sh
et puis ...
sudo chown -R web:web /home/web/api/
sudo runuser -l web -c 'npm install --prefix /home/web/api'
de cette façon, node n'est jamais exécuté en tant que root et votre utilisateur peut installer sans sudo.
, vous pouvez essayer ce
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}