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 :
-
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
-
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
-
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: (
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
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:
- paquet.json propriétés
- npm installer
- NodeJS failles de sécurité: nodesecurity.io .
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:
- s'il y a un autre utilisateur sur la machine qui pourrait utiliser les paquets globaux npm - ne changez pas la propriété de/usr / local
- https://apple.stackexchange.com/questions/1393/are-my-permissions-for-usr-local-correct
- https://askubuntu.com/questions/261326/is-it-safe-to-chown-usr-local
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.
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
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.
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
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
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é!
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
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
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 .
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
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