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
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
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.
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.
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
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 .
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
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
Vous devez déverrouiller les autorisations dans votre répertoire home
, comme Noah
Sudo chown -R `whoami` ~/.npm
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
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).
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
.
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.
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
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
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.
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.
Créez un répertoire pour les installations globales:
mkdir ~/.npm-global
Configurez npm pour utiliser le nouveau chemin de répertoire:
npm config set prefix '~/.npm-global'
Ouvrez ou créez un fichier ~/.profile et ajoutez 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 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é.
Créez un répertoire pour vos packages globaux
mkdir "${HOME}/.npm-packages"
Référencez ce répertoire pour une utilisation future dans votre .bashrc/.zshrc:
NPM_PACKAGES="${HOME}/.npm-packages"
Indiquez à npm où stocker votre paquet installé globalement. Dans votre fichier
$HOME/.npmrc
, ajoutez:prefix=${HOME}/.npm-packages
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"
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.
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/
TL; DR
utilisez toujours
Sudo -i
ouSudo -H
lors de l'exécution denpm 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
:
npm install foo
Sudo install -g foo-cli
sans problèmenpm install bar
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.
Pour Mac (extrait de la réponse de Christoper Will)
Mac OS X 10.9.4
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.
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
Dans mon cas, c'est à cause de la permission de ~/tmp.So je fais:
Sudo chown -R $USER ~/tmp
Et c'est bon!
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
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:
Ouvrez le Finder et appuyez sur cmd
+ shift
+ g
ceci ouvrira le dossier Aller au dossier avec l'URL.
Écrivez le chemin suivant /usr/local/lib/node_modules
et appuyez sur go
Faites un clic droit sur le dossier node_modules
et choisissez Get Info
Faites défiler jusqu'à la section sharing & permissions
Déverrouiller pour pouvoir apporter des modifications.
Appuyez sur +
et ajoutez votre compte utilisateur.
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
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!
Voici comment j'ai résolu le problème sous Windows 8.1:
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/
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}
Cette solution autorise uniquement les répertoires nécessaires, en gardant les autres répertoires agréables et sûrs.
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
Créez un répertoire pour les installations globales:
mkdir ~/.npm-global
Configurez npm pour utiliser le nouveau chemin de répertoire:
npm config set prefix '~/.npm-global'
Ouvrez ou créez un fichier ~/.profile
ou ~/.bash_profile
et ajoutez cette ligne:
export PATH=~/.npm-global/bin:$PATH
Revenez sur la ligne de commande, mettez à jour vos variables système ou redémarrez le terminal:
source ~/.profile
(facultatif) Test: Téléchargez un package globalement sans utiliser Sudo.
npm install -g jshint
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
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!
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:
J'espère que cela aide les curieux!
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
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.
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!
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
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
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!
tu pourrais essayer ça
Sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
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