Les modules NPM ne s'installeront pas globalement sans sudo

je viens de réinstaller Ubuntu 12.04 LTS, et avant toute autre chose j'ai fait ces étapes :

  1. noeud installé via le gestionnaire de paquets avec le script suivant

    sudo apt-get update
    
    sudo apt-get install python-software-properties python g++ make
    
    sudo add-apt-repository ppa:chris-lea/node.js
    
    sudo apt-get update
    
    sudo apt-get install nodejs
    
  2. a essayé d'installer les générateurs de yeoman, express, N, yeoman globalement et tous ont retourné la même erreur

    npm ERR! Erreur: EACCES, symlink '../lib/node_modules/n/bin / n' 151940920"

    npm ERR! {[Error: EACCES, symlink '../lib/node_modules/n/bin / n'] errno: 3, code: 'EACCES', chemin: '../lib/node_modules/n/bin / n' }

    npm ERR!

    npm ERR! Essayez de lancer cette commande à nouveau en tant que root/Administrator.

    npm ERR! Système Linux 3.8.0-29-generic

    npm ERR! la commande "/usr/bin/node" et "/usr/bin/mnp" "installer"- g" "- d "" n "

    npm ERR! cwd/home / heberlz

    npm ERR! noeud-V0.10.20

    npm ERR! npm-v 1.3.11

    npm ERR! chemin. ./ lib / node_modules/n / bin / n

    npm ERR! code EACCES

    npm ERR! errno 3

    npm ERR! erreur de pile: EACCES, symlink "../lib/node_modules/n/bin / n' 151940920"

    npm ERR!

    npm ERR! Des détails supplémentaires sur la journalisation peuvent être trouvés dans:

    npm ERR! / home/heberlz / npm-debug.log

    npm ERR! pas ok code 0

  3. Récupéré la propriété de ces dossiers de manière récursive ~/.npm, /usr/lib/node /usr/lib/node_modules, ainsi que des liens symboliques dans /usr/bin/node /usr/bin/nodejs avec absolument aucun succès

je dois installer yeoman et ses générateurs sans sudo pour ne pas être en difficulté plus tard: (

113
demandé sur Phil 2013-10-14 07:13:10

13 réponses

Ubuntu 12.04 et en utilisant PPA de Chris Lea pour installer les travaux suivants pour moi:

npm config set prefix '~/.npm-packages'

et ajouter $HOME/.npm-packages/bin à la variable d'environnement $PATH

ajouter à .bashrc

export PATH="$PATH:$HOME/.npm-packages/bin"

voir https://stackoverflow.com/a/18277225 de @passy

304
répondu ErikAndreas 2017-05-23 12:34:47

si vous avez déjà $HOME/bin dans votre chemin, une solution plus simple est juste ...

npm config set prefix ~
  • de nouvelles commandes de noeuds vont maintenant s'installer dans votre répertoire $HOME/bin .
  • Pas besoin de changer votre chemin!

puisque cette discussion est vraiment sur la réduction des risques de sécurité de l'exécution sudo , vous devriez également être conscient que tout noeud app pourrait potentiellement installer une application nom qui ne correspond pas au nom du paquet de noeuds enregistré que vous pensez installer. Il y a donc un risque de sécurité qu'un npm install remplace une commande de système existante ou une commande que vous avez déjà dans $HOME/bin . Si vous êtes concerné, vérifiez le bin , et scripts propriétés dans le package.json fichier de l'application que vous installez en premier.

en général, il est plus sûr de:

  • (une) Place $HOME/bin dernière dans votre chemin d'accès pour le système de commandes ne sont pas remplacées.
  • b) ne comprend pas"."ou un chemin relatif dans votre $PATH pour ne pas lancer accidentellement une commande qui se trouve dans le répertoire courant.

référence:

19
répondu Tony O'Hagan 2014-08-06 03:45:34

Comme pour le mois d'octobre 2014:

Node.js est disponible dans les distributions binaires NodeSource Debian et Ubuntu repository .

curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install -y nodejs

C'est ça.

réponse périmée:

le moyen le plus rapide sans utiliser sudo est comme décrit ici par isaac

I nous vous encourageons fortement à ne pas faire de gestion de paquets avec sudo! Les paquets peuvent exécuter des scripts arbitraires, ce qui fait de sudoing un paquet le directeur commande aussi sûr qu'une coupe de tronçonneuse. Bien sûr, c'est rapide et va certainement couper à travers tous les obstacles, mais vous pourriez en fait je veux que cet obstacle reste là.

je recommande de le faire une fois à la place:

sudo chown -R $USER /usr/local

EDIT:

là certains problèmes de sécurité et certaines limitations fonctionnelles sont-ils liés au fait de changer la propriété de /usr/local à l'utilisateur actuel:

ayant dit que, si vous voulez installer global module sans utiliser sudo, Je ne vois pas de meilleure solution (d'un point de vue pragmatique) que mentionnée. Sécurité vs facile d'utilisation est un sujet très large, et il n'y a pas de réponse facile pour cela - il dépend juste de vos exigences.

13
répondu Andrei Karpushonak 2017-04-13 12:45:06

le problème était que j'installais le noeud en utilisant sudo , pour éviter les erreurs lors de l'installation des modules npm globalement, on ne doit jamais installer le noeud avec sudo.

ma solution était de réinstaller le noeud il 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 nœud-v0.10.20.tar.gz #uncpress sources

cd nœud-v0.10.20 #entrer un dossier non compressé

sudo chown-R $USER /usr / local

./ configure --prefix= / usr / local & & make & & make install

une chose à noter est que seule la prise de possession du dossier / usr / local ne fonctionnerait pas dans mon cas parce que l'installation du noeud lui-même a été faite avec sudo

dernière étape pour installer yeoman: #bien qu'à yeoman.io il est dit que faire de la "npm install-g yo" déjà installe bower et grunt, il y a quelques submodules de grognement qui ne parviennent pas, donc j'ai corrigé que par l'installation elle-même

npm install-g bower

npm install-g grunt

npm install-g yo

npm install-g générateur-angulaire

10
répondu HeberLZ 2014-07-24 11:59:21

j'ai résolu ce problème avec environment variable et shell alias:

export NPM_PREFIX=$HOME/node
alias npmg="npm -g --prefix $NPM_PREFIX"

Pour moi, la ngp n'a pas d'honneur, le "préfixe" paramètre de configuration .npmrc.

4
répondu santervo 2014-06-07 19:05:03

selon ce poste de SO similaire: npm lance erreur sans sudo

semble comme vous pourriez avoir un problème de propriété avec ~/.npm annuaire.

comme pour la réponse dans celui-là, essayez:

sudo chown -R `whoami` ~/.npm
2
répondu prasanthv 2017-05-23 11:33:24

si vous êtes sur une machine de développement, vous pourriez être mieux d'envisager d'utiliser nvm .

si ce n'est pas le cas, vous voulez simplement installer en utilisant votre gestionnaire de paquets préféré.

quoi qu'il en soit, je vous recommande vérifier cette réponse sur stackoverflow

1
répondu Iam Zesh 2017-05-23 11:47:28

en fait, je viens de changer la permission d'un dossier utilisateur qui appartenait à root:

sudo chown -R $USER ~/.config/configstore

alors je pourrais "npm install" et "bower install" sans sudo! A bien fonctionné!

1
répondu Vinggui 2015-11-25 18:31:09

trouver le chemin d'accès au répertoire de la npm:

npm config get prefix

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

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

voici le lien pour plus de détails""

https://docs.npmjs.com/getting-started/fixing-npm-permissions

1
répondu Monis Majeed 2017-07-31 10:37:04

en utilisant lubuntu 14.04.3, j'ai essayé de changer la propriété de .npm et npm préfixe, mis à jour mon chemin, npm modules installés dans mon répertoire d'origine sans sudo, mais le chemin était incorrect de sorte que les modules comme ember n'ont pas été trouvés, linuxbew résolu le problème, guide de configuration rapide ici pour noeud / npm

0
répondu Conor 2015-12-08 23:43:37

ce problème et d'autres causés par la même raison peuvent être résolus en installant le noeud dans l'espace de l'utilisateur.

Vous pouvez simplement copier et coller dans votre terminal

NODEJS_ROOT=${NODEJS_ROOT:-~/nodejs}
cd /tmp
wget -N http://nodejs.org/dist/node-latest.tar.gz && tar xzf node-latest.tar.gz
NODEJS_CURRENT=$(tar tf node-latest.tar.gz|head -1)
mkdir -p $NODEJS_ROOT/$NODEJS_CURRENT
cd $NODEJS_CURRENT
./configure --prefix=$NODEJS_ROOT/$NODEJS_CURRENT && make install
cd $NODEJS_ROOT
rm current 2> /dev/null # Removes current symbolic link, if any
ln -s $NODEJS_CURRENT current

mêmes commandes peuvent être lancées aussi pour obtenir noeud mis à jour à la dernière version.

N'oubliez pas de modifier votre environnement. Une seule fois, faites

echo "export NODEJS_ROOT=$NODEJS_ROOT"            >> $HOME/.bash_profile
echo 'export PATH=$NODEJS_ROOT/current/bin:$PATH' >> $HOME/.bash_profile
source $HOME/.bash_profile # reload your env, so you can use node right now

voir cet article comme un reabout comment installer Nœud.js sans sudo .

pour une solution plus générale sur ce sujet (i.e., installer un logiciel localement) voir dotsoftware .

0
répondu Gianluca Casati 2016-02-07 20:48:21

je trouve explications de Pawel Grzybek très convaincant: ils se réduisent à 3 commandes sudo simples, Ne jamais avoir à utiliser sudo à nouveau pour les installations npm globale:

sudo chown -R $(whoami) /usr/local/lib/node_modules
sudo chown -R $(whoami) /usr/local/bin
sudo chown -R $(whoami) /usr/local/share
-1
répondu Frank Nocke 2016-10-28 15:36:14

la meilleure solution que j'ai trouvée était d'installer Node.js depuis le goudron paquet sur répertoire principal de l'utilisateur et lien le dossier lib de l'emplacement. Voici ce que vous devez faire

cela installera Nodejs sous ~/.local / au lieu du /usr/local /

Add this to your ~/.npmrc (create the file if it doesn't exist already):

root =    /home/YOUR-USERNAME/.local/lib/node_modules
binroot = /home/YOUR-USERNAME/.local/bin
manroot = /home/YOUR-USERNAME/.local/share/man
Download the Nodejs source code from nodejs.org and install it under your ~/.local tree:

tar xf node......
cd node........
./configure --prefix=~/.local
make
make install

Create ~/.node_modules symlink. (This directory will be automatically searched when you load modules using require "module" in scripts. I'm not sure why Node doesn't search ~/.local/lib/node_modules by default.)

cd
ln -s .local/lib/node_modules .node_modules
Is ~/.local/bin in your path? Type

which npm
If it says ~/.local/bin/npm, you're done.

Otherwise, do this...

export PATH=$HOME/.local/bin:$PATH
...and add that line to your ~/.profile file, so it'll run every time you log in.

si vous rencontrez toujours une erreur de propriété ou de permission lors de l'installation de paquets, alors changez la propriété de ~/.local/ dir en exécutant

chown -R user:user ~/.local/

Maintenant vous devrait être bon pour installer des paquets via 'npm'

Note: toutes les commandes ci-dessus doivent être exécutées en tant qu'utilisateur. N'UTILISEZ PAS SUDO OU ROOT LOGIN

NE MODIFIEZ JAMAIS LA PERMISSION DES DOSSIERS SOUS '/USR/LIB/'. VA CONDUIRE À L'INSTABILITÉ DE L'OS

-2
répondu Shank_Transformer 2014-07-02 05:40:07