web-dev-qa-db-fra.com

Les modules NPM ne s'installeront pas globalement sans sudo

Je viens de réinstaller Ubuntu 12.04 LTS, et avant tout, j'ai fait ces étapes:

  1. Installé Node 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. J'ai essayé d'installer les générateurs yeoman, express, n, yeoman dans le monde entier et tous ont renvoyé la même erreur

    npm ERR! Erreur: EACCES, lien symbolique '../lib/node_modules/n/bin/n'

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

    npm ERR!

    npm ERR! Veuillez essayer de réexécuter cette commande en tant que root/administrateur.

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

    npm ERR! commande "/ usr/bin/noeud" "/ usr/bin/npm" "installer" "-g" "-d" "n"

    npm ERR! cwd/home/heberlz

    npm ERR! noeud -v 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, lien symbolique '../lib/node_modules/n/bin/n'

    npm ERR!

    npm ERR! Des informations de connexion supplémentaires peuvent être trouvées dans:

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

    npm ERR! pas ok code 0

  3. Propriété récupérée récursivement des dossiers suivants ~/.npm,/usr/lib/noeud,/usr/lib/node_modules, et des liens symboliques suivants/usr/bin/noeud,/usr/bin/nodejs sans aucun succès

J'ai besoin d'installer yeoman et ses générateurs sans Sudo pour ne pas avoir d'ennuis plus tard :(

120
HeberLZ

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

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

et en ajoutant $ HOME/.npm-packages/bin à $ PATH

ajouter à .bashrc

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

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

309
ErikAndreas

Si vous avez déjà _$HOME/bin_ sur votre chemin, une solution plus simple est simplement ...

_npm config set prefix ~
_
  • Les nouvelles commandes de nœud vont maintenant s'installer dans votre répertoire _$HOME/bin_.
  • Pas besoin de changer de chemin!

Dans la mesure où cette discussion concerne réellement la réduction des risques de sécurité liés à l'exécution de Sudo, vous devez également savoir que toute application de nœud pourrait éventuellement installer un nom d'application qui ne correspond pas au nom du package de nœud enregistré que vous pensez installer. Il existe donc un risque de sécurité qu'un _npm install_ remplace une commande système existante ou une commande existante dans _$HOME/bin_. Si cela vous intéresse, vérifiez les propriétés bin et scripts dans le fichier package.json de l'application que vous installez en premier.

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

  • (a) Placez _$HOME/bin_ en dernier dans votre chemin afin que les commandes système ne soient pas remplacées.
  • (b) n'incluez pas "." ou n'importe quel chemin relatif dans votre _$PATH_ afin de ne pas exécuter accidentellement une commande qui se trouve dans le répertoire en cours.

Référence:

21
Tony O'Hagan

Comme pour octobre 2014:

Node.js est disponible à partir des distributions binaires NodeSource Debian et Ubuntu référentiel .

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

Je vous encourage fortement à ne pas gérer les paquets avec Sudo! Les paquetages peuvent exécuter des scripts arbitraires, ce qui rend une commande de gestionnaire de paquet aussi sûre qu'une coupe à la tronçonneuse. Bien sûr, il est rapide et va certainement éliminer tous les obstacles, mais vous voudrez peut-être que cet obstacle y reste.

Je recommande de faire cela une fois à la place:

Sudo chown -R $USER /usr/local

EDIT:

Il existe certaines préoccupations de sécurité et limitations fonctionnelles concernant le changement de propriété de/usr/local en utilisateur actuel:

Cela dit, si vous souhaitez installer le module global sans utiliser Sudo, je ne vois pas de meilleure solution (du point de vue pragmatique) que celle mentionnée. La sécurité par rapport à la facilité d'utilisation est un sujet très vaste, et il n'y a pas de réponse simple à cela - cela dépend de vos besoins.

13
Andrei Karpushonak

Le problème était que le noeud installé sous Sudo, pour éviter les erreurs lors de l’installation globale des modules npm, il ne faut JAMAIS installer le noeud avec Sudo.

Ma solution consistait à réinstaller le noeud cela de cette façon:

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 -R $ USER/usr/local

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

Une chose à noter est que seule l’appropriation du dossier/usr/local ne fonctionnerait pas dans mon cas car l’installation du nœud a été faite avec Sudo

Dernière étape pour installer yeoman: #bien qu'à yeoman.io, il est indiqué que l'installation de "npm install -g yo" installe déjà bower et grunt, qu'il existe des sous-modules de grunt qui échouent.

npm installer -g bower

npm installer -g grunt

npm install -g yo

npm install -g générateur-angulaire

10
HeberLZ

J'ai résolu ce problème avec la variable d'environnement et l'alias du shell:

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

Pour moi, npm n'a pas respecté le paramètre de configuration "préfixe" de .npmrc.

4
santervo

Trouvez le chemin du répertoire de npm:

npm config get prefix

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

Changez le propriétaire des répertoires de npm avec 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).

Voici le lien pour plus de détails

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

3
Monis Majeed

Selon ce SO post similaire: npm génère une erreur sans Sudo

Il semble que vous ayez un problème de propriété avec le répertoire ~/.npm.

Comme pour la réponse dans celle-là, essayez:

Sudo chown -R `whoami` ~/.npm
2
prasanthv

En fait, je viens de changer l'autorisation d'un dossier utilisateur appartenant à root:

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

Ensuite, je pourrais "installer npm" et "installer bower" sans Sudo! A bien fonctionné!

1
Vinggui

Si vous êtes sur une machine de développement, vous feriez bien d’envisager d’utiliser nvm .

Sinon, vous voulez simplement installer en utilisant votre gestionnaire de paquets préféré.

Quoi qu'il en soit, je recommanderais en vérifiant cette réponse sur stackoverflow

1
Iam Zesh

en utilisant lubuntu 14.04.3, j'ai essayé de changer la propriété des préfixes .npm et npm, mis à jour mon chemin, npm a installé les modules dans mon répertoire personnel sans Sudo mais le chemin était incorrect, ainsi les modules comme ember n'ont pas été trouvés, linuxbew résolu le problème, guide d'installation rapide ici pour node/npm

0
Conor

Ce problème, ainsi que d'autres causés par la même raison, peuvent être résolus en installant Node dans l'espace utilisateur.

Vous pouvez le faire simplement en copiant et collant 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

Les mêmes commandes peuvent également être lancées pour mettre à jour Node à la dernière version.

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

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

Consultez cet article pour savoir comment installer Node.js sans Sudo .

Pour obtenir une solution plus générale sur ce sujet (installer un logiciel localement, par exemple), voir logiciel de points .

0
Gianluca Casati