Je viens d'installer node et npm via le package sur nodejs.org et chaque fois que j'essaie de rechercher ou d'installer quelque chose avec npm, il génère l'erreur suivante, sauf si je lance la commande. J'ai le sentiment qu'il s'agit d'un problème d'autorisations? Je suis déjà 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
sudo chown
: github.com/sindresorhus/guides/blob/master/…Réponses:
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:
la source
whoami
c'était un espace réservé, mais cela fonctionne typé littéralement tel quel, donc ce doit être une variable que je ne comprends pas.whoami
s'assurer qu'il est exécuté correctement puis placé dans la commande chownsudo chown -R simpleascouldbe ~/.npm
Autorisations que vous avez utilisé lors de l' installation de nœud sera nécessaire lors de faire des choses comme l' écriture dans votre répertoire NPM (
npm link
,npm install -g
, etc.).Vous avez probablement exécuté l'installation de noeud avec des autorisations root, c'est pourquoi l'installation du package global vous demande d'être root.
Solution 1: NVM
Sur une machine de développement, vous ne devez pas installer et exécuter le nœud avec des autorisations root, sinon des choses 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 jouer facilement avec elles. Parfait pour le développement.
nvm install node
Désormais
npm link
, vousnpm install -g
n'aurez plus besoin d'être root.Modifier: Voir également https://docs.npmjs.com/getting-started/fixing-npm-permissions
Solution 2: installer des packages globalement pour un utilisateur donné
Si vous êtes sous OSX ou Linux, vous pouvez créer un répertoire dédié à l'utilisateur pour votre package global et votre configuration
npm
etnode
savoir comment trouver des packages installés globalement.Consultez cet excellent article pour obtenir des instructions étape par étape sur l'installation des modules npm dans le monde sans sudo.
Voir aussi: la documentation de npm sur la correction des autorisations npm .
la source
npm ls -gp | awk -F/ '/node_modules/ && !/node_modules.*node_modules/ {print $NF}' | xargs npm -g rm
- J'ai dû réinstaller nodejs et dans un shell root et les désinstaller, sinon vous continuerez d'avoir des liens symboliques vers yo, grunt, etc…sudo npm list -g --depth=0. | awk -F ' ' '{print $2}' | awk -F '@' '{print $1}' | sudo xargs npm remove -g
stackoverflow.com/a/22290968/1449157 , puis suppriménpm
et installé vianvm
Vous aurez également besoin de la permission d'écriture dans le
node_modules
répertoire:la source
~/tmp
répertoire pour moi.node_modules
dans/usr/local/lib/
. wtf?Then I ran sudo chown -R $USER /* and everything was fine
- NON - vous ruinez votre machine.Changer le propriétaire des dossiers "global du système" est un hack. Lors d'une nouvelle installation, je configurerais NPM pour utiliser un emplacement déjà accessible en écriture pour les programmes "utilisateur global":
Assurez-vous ensuite d'ajouter ce dossier à votre chemin:
Voir la réponse de @ErikAndreas aux modules NPM ne s'installera pas globalement sans sudo et un guide étape par étape plus long de @sindresorhus avec également des sets .
$MANPATH
la source
$HOME
votre.profile
script se chargera généralement de$PATH
la prochaine fois que vous le sourcez (par exemple, la prochaine fois que vous vous connectez).$HOME
et pourrait interférer avec d'autres (futurs?) Fichiers / sous-dossiers NPM. Préférez garder les binaires de différents gestionnaires de packages / langues / systèmes de construction séparés et définis explicitement$PATH
(dans un script de temps de connexion) à la place.~/lib/node_modules
, avec leur CLI associée, le cas échéant, dans~/bin
. Pour de nombreux utilisateurs, surtout si elles n'ont pas racine, à la fois~/bin
et~/lib
existent déjà.~/bin
, puis faites de même pour un ou deux gestionnaires de packages supplémentaires. Cela pourrait ne pas se produire aujourd'hui ou demain, mais il y a un risque clair que deux packages provenant de différents gestionnaires se heurtent à un nom et se remplacent mutuellement les fichiers. C'est un assez bon cas pour moi d'avoir des préfixes séparés. (Des exemples concrets seraient appréciés.)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 niche:
Vous devez déverrouiller les autorisations dans votre
home
répertoire, comme le dit Noah :Vous avez également besoin d'autorisations d'écriture dans le
node_modules
répertoire, comme le dit Xilo , donc si cela ne fonctionne toujours pas, essayez:Si vous voyez toujours des erreurs, vous devrez peut-être également corriger les
/usr/local
autorisations :Veuillez noter que, comme indiqué dans cet article, ce
/usr/local/
n'est pas un répertoire système si vous êtes sur un Mac, donc cette réponse est en fait parfaitement "sûre" pour les utilisateurs de Mac. Cependant, si vous êtes sous Linux, consultez la réponse de Christopher Will ci-dessous pour une solution multi-utilisateur conviviale, sûre pour le système (mais plus complexe).la source
Fais attention!!! Fais attention!!! Fais attention!!!
chown ou chmod n'est PAS la solution, à cause du risque de sécurité.
Au lieu de cela, faites:
Vérifiez d'abord où pointent npm, si vous appelez:
Si / usr est renvoyé, vous pouvez effectuer les opérations suivantes:
Cela crée un répertoire npm dans votre répertoire personnel et pointez
npm
dessus.Pour que ces modifications soient permanentes, vous devez ajouter la commande d'exportation à votre .bashrc:
la source
$PATH
, pas la chaîne elle-même. Tu devrais changer ça.D'autres réponses suggèrent de changer la propriété ou les autorisations des répertoires 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 plusieurs utilisateurs.
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épendants du nœud sur ce groupe.
Maintenant, vous pouvez facilement installer vos modules en tant qu'utilisateur
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 /.
Éditer
3 ans plus tard, je recommanderais d'utiliser Node Version Manager . Cela vous évite beaucoup de temps et d'ennuis.
la source
staff
pour accorder des autorisations à mes dossiers de développement. En outre, c'est une bonne idée de s'exécuterchmod g+ws node_modules
pour vous assurer que votre groupe dispose d'une autorisation de lecture / écriture./usr/lib
est sous le contrôle de votre gestionnaire de packages système et vous ne devez y apporter aucune modification.La documentation officielle sur la façon de corriger les
npm install
autorisations avec uneEACCES
erreur se trouve à https://docs.npmjs.com/getting-started/fixing-npm-permissions .J'ai rencontré ce problème après une nouvelle installation du nœud à l'aide du programme d'
.pkg
installation sur OSX. Il y a d'excellentes réponses ici, mais je n'ai pas encore vu de lien vers npmjs.com.Option 1: modifier l'autorisation du répertoire par défaut de npm
Trouvez le chemin vers le répertoire de npm:
Pour de nombreux systèmes, ce sera / usr / local .
AVERTISSEMENT : si le chemin affiché est juste / usr , passez à l' option 2 .
Remplacez le propriétaire des répertoires de npm par le nom de l'utilisateur actuel (votre nom d'utilisateur!):
Cela modifie les autorisations des sous-dossiers utilisés par npm et certains autres outils ( lib / node_modules , bin et share ).
Option 2: remplacer le répertoire par défaut de npm par 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'est-à - dire / 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 d'accueil.
Créez un répertoire pour les installations globales:
Configurez npm pour utiliser le nouveau chemin de répertoire:
Ouvrez ou créez un fichier ~ / .profile et ajoutez cette ligne:
De retour sur la ligne de commande, mettez à jour vos variables système:
la source
/usr/bin/
? Maintenant, seul votre utilisateur peut y accéder. Vous vous connectez en tant que quelqu'un d'autre, toujours pas d'accès, car les fichiers sont en fait dans le répertoire personnel d'un autre utilisateur!Comme si nous avions besoin de plus de réponses ici, mais de toute façon ..
Sindre Sorus a un guide Installer les packages npm dans le monde sans sudo sur OS X et Linux décrivant comment installer proprement sans jouer avec les autorisations:
Consultez la source de ce guide pour les dernières mises à jour.
la source
TL; DR
-
Lorsque vous l'utilisez,
npm
il télécharge des packages dans votre répertoire personnel. Lorsque vous exécutez en tant que sudo,npm
installe les fichiers dans le même répertoire, mais maintenant ils appartiennent à root.C'est donc ce qui arrive à absolument chaque personne qui a déjà utilisé
npm
:npm install foo
sudo install -g foo-cli
sans problèmenpm install bar
npm
concepteurs maintenant que vous devez à nouveau consulterchmod
un répertoireLorsque vous utilisez l' option
-i
ou-H
avec sudo, votre répertoire personnel sera leroot
répertoire personnel de. Toutes les installations globales mettront les packages en cache au/root/.npm
lieu desroot
fichiers appartenant à/home/me/.npm
.Utilisez toujours
sudo -i
ousudo -H
lors de l'exécutionnpm install
pour installer des packages globaux et vosnpm
problèmes d'autorisations disparaîtront.Pour de bon.
http://hood.ie/blog/why-you-shouldnt-use-sudo-with-npm.html
- qv la réponse acceptée pour la fixation d'un déjà baisé
npm
.la source
J'ai eu un problème similaire lorsque les modules NPM ne s'installent pas globalement sans sudo , le problème était que lorsque j'ai installé le nœud, je l'ai fait avec sudo via chris / lea ppa repo .
Ma solution était de désinstaller le nœud et de l'installer de cette façon:
Téléchargez les dernières sources de nœuds stables à partir de nodejs.org #in my case node-v0.10.20.tar.gz
PD: Si vous ne voulez pas changer 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 afin que nous puissions utiliser la commande node plus tard
Avec l'une ou l'autre de ces approches, vous pourrez effectuer les opérations suivantes sans utiliser sudo
la source
sudo chown $USER /use/local
avant la construction. Ça a l'air bien jusqu'à présent, il est temps d'essayer de construire un atome! Merci!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)
** Je vous recommande fortement de ne pas utiliser la gestion des paquets avec sudo (sudo npm -g installer quelque chose), car vous pouvez avoir des problèmes plus tard **
Référence: http://foohack.com/2010/08/intro-to-npm/
la source
sudo chown -R `whoami` ~/.npm
,sudo chown -R `whoami` /usr/local/lib
etPour Mac (adopté à partir 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>
Nom du compte "Groupe" : nodegrp
Après avoir créé le groupe, cochez l'utilisateur à inclure dans ce groupe
la source
sudo
ou de changer la propriété de ces groupes de dossiers afin qu'elle puisse être modifiée par un utilisateur normal? Si l'utilisateur normal n'est pas censé effectuer aucune action sur ce dossier, il ne faut bien sûr pas modifier la propriété du groupe du dossier.-H
indicateur. Plus précisément,sudo -H npm install -g <pkg>
. Cela garantit une délimitation correcte des autorisations pour les dossiers système et utilisateur. Ce que vous ne voulez pas faire, c'est utilisersudo npm install -g
, car cela installe les fichiers appartenant à root dans votre répertoire utilisateur. Ce serait génial si npm était assez intelligent pour le faire de la bonne façon, mais ce n'est pas le cas, vous devez donc utiliser le-H
drapeau sudo pour installer correctement à l'échelle mondiale.Dans mon cas, c'est à cause de l'autorisation de ~ / tmp, donc je fais:
Et c'est OK!
la source
Pour moi, exécutez seulement
ne fonctionne pas. Ensuite, j'exécute aussi
Et tout fonctionne bien!
la source
/usr/lib
sont des fichiers système et ne doivent pas appartenir à votre compte d'utilisateur personnel.PROBLÈME : vous (l'utilisateur) n'avez pas le 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 mauvaise installation.
ET changer la propriété du répertoire n'est pas une bonne option, un correctif temporaire.
Solution / Suggestion : changer le répertoire par défaut de npm (à partir des documents officiels )
Sauvegardez votre ordinateur avant d'avancer.
(facultatif) Si vous avez une installation erronée, désinstallez-la d'abord:
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
De retour 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
la source
Au cas où
sudo chown -R $(whoami) ~/.npm
cela 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
cela ouvrira le dossier avec l'URLÉcrivez le chemin suivant
/usr/local/lib/node_modules
et appuyez sur goFaites un clic droit sur le
node_modules
dossier et choisissezGet Info
Faites défiler jusqu'à la
sharing & permissions
sectionDéverrouillez pour pouvoir apporter des modifications.
Appuyez
+
et ajoutez votre compte utilisateurAssurez-vous que vous choisissez
Read & Write
dans la liste déroulante des privilègesVous devriez maintenant pouvoir installer des packages sans
sudo
et les problèmes d'autorisation devraient être résolusla source
Problème: vous n'êtes pas autorisé à écrire dans les répertoires que npm utilise pour stocker les packages et commandes globaux.
Solution: autorisez l'autorisation pour npm.
Ouvrez un terminal:
Entrez cette commande:
Cette solution permet l'autorisation de SEULEMENT les répertoires nécessaires, en gardant les autres répertoires agréables et sûrs.
la source
npm config get prefix
renvoie quelque chose dans le dossier de base, cette solution corrigera les autorisations, mais ne résout pas le problème sous-jacent d'installation de packages globaux de manière sûre pour un environnement partagé.Un autre grand correctif ici pour configurer correctement NPM, exécutez les commandes suivantes:
la source
vous pouvez essayer cela, fonctionne sur ubuntu et mac
la source
Ce qui me semble être la meilleure option est celle suggérée dans la documentation de npm , qui est de vérifier d'abord où les node_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 comme 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
pour plus de cohérence, car je suis également un utilisateur Mac (je préfère ne pas avoir besoin de regarder dans des endroits différents en fonction de la machine devant laquelle je me trouve). Une autre bonne raison de le faire est le fait que le/usr/local
dossier est probablement déjà dans votre PATH (sauf si vous aimez jouer avec votre PATH), mais il est probable que votre dossier nouvellement créé ne soit pas et vous devrez l'ajouter à la Parcourez- vous sur votre profil .bash ou votre fichier .bashrc .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 autorisations pour les dossiers utilisés par npm avec la commande:Vous pouvez maintenant installer globalement n'importe quel module en toute sécurité. J'espère que cela t'aides!
la source
Voici comment j'ai résolu le problème sur Windows 8.1:
la source
La meilleure solution serait celle fournie par la documentation npm.
Pour Ubuntu, la solution suggérée est l' option # 2
Étapes brèves:
créez un répertoire pour les installations globales:
mkdir ~/.npm-global
Configurer npm pour utiliser le nouveau chemin de répertoire: peut vous aider à vérifier si le préfixe a été mis à jour ou non. Le résultat serait <Votre répertoire personnel> /. Npm-global
npm config set prefix '~/.npm-global'
npm config get prefix
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
Au lieu des étapes 2 à 4, vous pouvez également utiliser la variable ENV correspondante (par exemple, si vous ne souhaitez pas modifier ~ / .profile):
NPM_CONFIG_PREFIX=~/.npm-global
Pour la solution suggérée pour Mac est l' option # 3
Sur Mac OS, vous pouvez éviter complètement ce problème en utilisant le gestionnaire de packages Homebrew
brew install node
la source
Je le résous en changeant le propriétaire de root en mon nom d'utilisateur
sudo chown -R me:me /home/me/.config/configstore/
changez-moi avec votre nom d'utilisateur et votre groupe.
la source
J'aime utiliser des groupes ubuntu pour y parvenir au lieu de changer de propriétaire. C'est assez simple.
Installez d'abord nodejs et npm en utilisant apt-get
sudo apt-get update && sudo apt-get install nodejs npm
Déterminez qui est connecté, c'est-à-dire le nom d'utilisateur, exécutez la commande suivante pour le voir dans le terminal
whoami
Vous pouvez voir la liste des groupes qui vous sont attribués en utilisant une commande très simple, normalement le premier groupe est votre nom d'utilisateur lui-même
groups
Exécutez la commande suivante pour autoriser l'accès à l'utilisateur connecté
sudo chmod 777 -R /usr/local && sudo chgrp $(whoami) -R /usr/local
Mettre à jour npm et nodejs
npm install -g npm
Vous êtes allset, votre utilisateur peut exécuter des commandes npm sans sudo
Vous pouvez également vous référer à ce lien https://askubuntu.com/a/1115373/687804
la source
Sur Mac OS X, lors de l'installation avec Homebrew
brew install npm
, le chemin d'installation est/usr/local/share/npm/
avec les deuxbin/
et leslib/node_modules/
sous - dossiers.L'exécution de cette commande pour changer de propriétaire à votre utilisateur actuellement connecté devrait tout réparer et vous permettre d'installer des packages NPM globaux sans
sudo
.osx homebrew
la source
npm config
place.En fait, j'avais aussi le même problème. J'utilisais Ubuntu. Un problème de mine survient parce que j'avais perdu ma clé publique d'Ubuntu. Même la mise à jour de mon système ne se faisait pas. Cela donnait une erreur GPG. Dans ce cas, vous pouvez récupérer votre clé en utilisant cette commande:
Après cela, npm fonctionne bien!
la source
John Papa souligne 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 source
C'est la solution que j'ai utilisée et travaillée. J'ai essayé d'utiliser
whoami
jamais travaillé.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
la source
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.
Recherchez ensuite la dernière version:
Installez ensuite la dernière version:
exemple
la source