node.js - nodejs - update npm




NPM renvoie une erreur sans sudo (20)

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

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

Ce qui me semble être la meilleure option est celui suggéré dans la documentation de npm , qui consiste à vérifier d'abord où les modules nodaux globaux sont installés par défaut en exécutant le 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 déranger 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 la cohérence car je suis aussi un utilisateur Mac (je préfère ne pas avoir besoin de regarder dans différents endroits en fonction de la machine dans laquelle je me trouve) devant). Une autre bonne raison de faire cela est le fait que le dossier /usr/local est probablement déjà dans votre PATH (à moins que vous ne vouliez jouer avec votre PATH) mais il est probable que votre dossier nouvellement créé ne l'est pas et que vous ayez besoin de ajoutez-le au PATH vous même sur votre fichier .bash-profile ou .bashrc .

En bref, j'ai changé l'emplacement par défaut des modules globaux avec le 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é par npm avec la commande:

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

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


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.


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


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

sudo chown -R $USER ~/tmp

Et c'est OK!


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


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


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

Les démarches de John Papa sont les suivantes:

  1. Utiliser le brassage pour installer le nœud sans NPM
  2. Mettez à jour votre .bash_profile / .bashrc pour que npm et node sachent où installer et trouver les paquets
  3. Utilisez brassage pour mettre à jour le noeud et npm pour se mettre à jour

J'espère que cela aide les curieux!


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

J'ai rencontré ce problème après une nouvelle installation de noeud en utilisant le .pkg installation .pkg sur OSX. Il y a quelques bonnes réponses ici, mais je n'ai pas encore vu de lien vers npmjs.com.

Option 1: modifiez l'autorisation du répertoire par défaut de npm

  1. Trouvez le chemin vers le répertoire de npm:

    npm config get prefix
    

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

AVERTISSEMENT : Si le chemin affiché est juste / usr , passez à l' option 2 .

  1. Changez le propriétaire des répertoires de npm au 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 d'autres outils ( lib / node_modules , bin et share ).

Option 2: Changer le répertoire par défaut de npm dans un autre répertoire

Il y a des moments où vous ne voulez pas changer de propriétaire du répertoire par défaut que npm utilise (ie / 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 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
    

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

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 .


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


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!


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


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


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é.


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

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

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

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ù npm pointe vers, si vous appelez:

npm config get prefix

Si / usr est renvoyé, vous pouvez effectuer les opérations suivantes:

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 pointe vers npm.

Pour obtenir ces changements permanents, vous devez ajouter la commande d'exportation à votre .bashrc:

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




sudo