node.js nodejs - NPM renvoie une erreur sans sudo




install nvm (25)

La meilleure solution serait https://docs.npmjs.com/getting-started/fixing-npm-permissions fournie par la documentation npm.

Pour Ubuntu solution proposée est l' option # 2

Brèves étapes:
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'
npm config get prefix 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

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 voulez pas modifier ~ / .profile):

NPM_CONFIG_PREFIX=~/.npm-global

Pour Mac, la solution proposée est l' Option#3

Sur Mac OS, vous pouvez éviter ce problème en utilisant le gestionnaire de paquets Homebrew

brew install node

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

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

sudo chown -R $USER ~/tmp

Et c'est OK!


C'est la solution que j'ai utilisée et travaillée. J'ai essayé d'utiliser whoami n'a 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


PROBLEME : Vous (l'utilisateur) n'avez pas le bon ensemble d'autorisations pour le répertoire.

L'issue immédiate est d'exécuter l'installation de npm en utilisant sudo, mais cela peut vous donner la même erreur, ou une mauvaise installation.

ET changer la propriété de l'annuaire n'est pas une bonne option, un correctif temporaire.

Solution / Suggestion : Modifier le répertoire par défaut de npm (à partir des docs officiels)

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

(facultatif) Si vous avez une installation erronée, désinstallez-la 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 
  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. De retour sur la ligne de commande, mettez à jour vos variables système ou redémarrez le terminal:

    source ~/.profile

  5. (optionnel) Test: Téléchargez un paquet globalement sans utiliser sudo.

    npm install -g jshint


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 de la sienne.

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

Puis recherchez la dernière version:

nvm ls-remote

Ensuite, installez la nouvelle version:

nvm install YOUR_VERSION_HERE

Exemple

nvm install v5.8.0

Pour Mac (adopté 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 noeudgrp / usr / local / lib / noeud_modules /
    sudo chgrp nodegrp / usr / bin / noeud
    sudo chgrp nodegrp / usr / bin / npm
    sudo chown -R $ (whoami): nodegrp ~ / .npm


J'ai rencontré cela lors de l'installation 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 répertoire personnel, comme le dit :

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

    sudo chown -R `whoami` /usr/local/lib/node_modules
    
  3. Si des erreurs persistent, vous devrez peut-être également corriger /usr/local autorisations /usr/local :

    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 /usr/local/ 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 la réponse de Christopher Will ci-dessous pour une solution multi-utilisateur, facile à utiliser (mais plus complexe).


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

Il est facile de 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 something), car vous pourrez avoir des problèmes plus tard **

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


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

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


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

Vous avez probablement exécuté une installation de noeud avec des permissions root, c'est pourquoi l'installation du paquet 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 auront besoin des mêmes permissions.

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). This pourrait vous aider.
  2. Ensuite, installez NVM suivant les instructions NVM .
  3. Installer le noeud via NVM: nvm install node

Maintenant, le 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é à l'utilisateur pour votre paquet global et configurer npm et node pour savoir comment trouver les paquets installés globalement.

Découvrez github.com/sindresorhus/guides/blob/master/… pour des instructions étape par étape sur l'installation de modules npm globalement sans sudo.

Voir aussi: la documentation de npm sur la https://docs.npmjs.com/getting-started/fixing-npm-permissions .


En fait, j'avais aussi le même problème. Je courais Ubuntu. Le problème de mine se pose parce que j'avais perdu ma clé publique d'Ubuntu. Même la mise à jour de mon système ne se faisait pas. C'était donner 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 ça, ça fonctionne très bien!


Pour moi, exécutez seulement

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!


Dans le cas où sudo chown -R $(whoami) ~/.npm ne fonctionne pas 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 d'autorisation d'écriture dans le dossier node_modules, vous pouvez donc effectuer les opérations suivantes

  1. Ouvrez finder et appuyez sur cmd + shift + g cela va ouvrir aller dans le dossier avec l'URL

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

  3. Cliquez avec le bouton droit sur le dossier node_modules et choisissez Get Info

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

  5. Débloquez pour pouvoir faire des changements.

  6. Appuyez sur + et ajoutez votre compte d'utilisateur

  7. Assurez-vous que vous choisissez Read & Write dans le menu déroulant des privilèges

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


Problème: Vous n'êtes pas autorisé à écrire dans les répertoires utilisés par npm pour stocker les packages et commandes globaux.

Solution: Autoriser l'autorisation pour npm.

Ouvrez un terminal:

commande + barre d'espace puis tapez "terminal"

Entrez cette commande:

sudo chown -R $ (whoami) $ (npm config get préfixe) / {lib / node_modules, bin, partage}

  • Note: ceci nécessitera votre mot de passe.

Cette solution permet la permission de SEULEMENT les répertoires nécessaires, gardant les autres répertoires agréables et sûrs.


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 recommanderais d'utiliser NVM . Cela vous donne beaucoup de temps et d'ennuis.


Vous aurez également besoin de l'autorisation d'écriture dans le répertoire node_modules :

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

TL; DR

utilisez toujours sudo -i ou sudo -H lorsque vous exécutez npm install pour installer des packages globaux.

-

Lorsque vous utilisez npm il télécharge des packages dans votre répertoire personnel. Lorsque vous exécutez sudo, npm installe les fichiers dans le même répertoire, mais maintenant ils appartiennent à root.

Donc, c'est ce qui arrive à absolument chaque personne qui a déjà utilisé npm :

  • installer quelques paquets locaux sans problème en utilisant npm install foo
  • installer le paquet global en utilisant sudo install -g foo-cli sans problème
  • tentative d'installation du package local avec la npm install bar
  • être frustré par les concepteurs de npm maintenant que vous devez aller à nouveau chmod un répertoire

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 /root/.npm cache les paquets dans /root/.npm au lieu des fichiers root dans /home/me/.npm .

Utilisez toujours sudo -i ou sudo -H lorsque vous exécutez npm install pour installer des packages globaux et que vos problèmes de permissions npm disparaîtront.

Pour de bon.

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

- qv la réponse acceptée pour réparer un npm déjà baisé.


J'ai eu un problème similaire à NPM modules ne seront pas installer 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 noeud et ensuite l'installer de cette façon:

Télécharger les dernières sources de nœuds stables depuis nodejs.org # dans mon cas node-v0.10.20.tar.gz

tar -zxf node-v0.10.20.tar.gz sources #uncompress

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 voulez pas changer de propriétaire du dossier / usr / local, vous pouvez l'installer dans un endroit 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

mkdir ~ / opt

./configure --prefix = ~ / opt && make && faire l'installation

echo 'export CHEMIN = ~ / opt / bin: $ {PATH}' >> ~ / .bashrc #ou ~ .profile ou ~ / .bash_profile ou ~ / .zshenv selon le système d'exploitation 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


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

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

npm config set prefix '~/.npm_packages'
PATH=$PATH:$HOME/.npm_packages/bin; export PATH

Si la modification des permissions pour le répertoire /usr/local/lib/npm_modules ne vous aide pas, vous devez ajouter votre utilisateur au groupe (dans la plupart des cas, il s'agit d' staff groupe de staff ) qui possède les droits rwx pour le /usr/bin . Parce que npm essaie de créer un symlink avec /usr/bin/__package__ .

PS Ne pas oublier de se reconnecter après avoir changé de groupe d'utilisateurs


J'ai trouvé que si vous seulement sudo -s "il démarre juste un shell avec les permissions root en une seule étape" et ça marche vraiment pour moi. Je ne sais pas si c'est une bonne pratique ou non.

J'espère que ça aide.

Référence: https://apple.stackexchange.com/posts/14423/revisions


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 la answer de @ErikAndreas aux modules NPM ne s'installera pas globalement sans sudo et un github.com/sindresorhus/guides/blob/master/… par @sindresorhus avec aussi les ensembles $MANPATH .


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

Sindre Sorus a un guide d' github.com/sindresorhus/guides/blob/master/… décrivant comment installer proprement sans se tromper avec les permissions:

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 votre fichier $HOME/.npmrc ajoutez:

    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 .zshrc .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)"
    

Découvrez npm-g_nosudo pour faire les étapes ci-dessus automagically

Vérifiez la github.com/sindresorhus/guides/blob/master/… pour les dernières mises à jour.


Je voudrais ajouter à la réponse mon point de vue sur ces explications de dépendances

  • dependencies sont utilisées pour une utilisation directe dans votre base de code, les choses qui finissent généralement dans le code de production, ou des morceaux de code
  • devDependencies sont utilisées pour le processus de construction, des outils qui vous aident à gérer la fin du code de fin, des modules de test tiers (par exemple, des paquets webpack)






node.js unix permissions npm sudo