Impossible d’utiliser NVM depuis la racine (ou sudo)

J’ai mentionné que mon application utilise une version différente de NodeJS lors de l’exécution de sudo .

 $ node -v v0.10.23 $ sudo node -v v0.11.8-pre 

Ce v0.11.8-pre m’a causé quelques problèmes, alors je ne veux certainement pas l’utiliser, mais je ne peux pas le changer pour root.

 $ sudo nvm use v0.10.23 sudo: nvm: command not found 

J’ai essayé d’installer nvm à partir de l’utilisateur root, mais j’ai eu l’erreur “NVM déjà installé”, mais nvm toujours pas trouvé lors de l’exécution de sudo . Quel est mon problème?

La liste de commandes ci-dessous (source: digitalocean ) semble résoudre le problème

 n=$(which node); \ n=${n%/bin/node}; \ chmod -R 755 $n/bin/*; \ sudo cp -r $n/{bin,lib,share} /usr/local 

La commande ci-dessus est un peu compliquée, mais tout ce qu’elle fait est de copier la version de noeud active via nvm dans le /usr/local/ (où les fichiers globaux installés par l’utilisateur doivent vivre sur un VPS Linux) et de définir les permissions tous les utilisateurs peuvent y accéder.

J’espère que cela t’aides!

Ma solution consiste à créer des liens symboliques à partir des versions de node et de npm j’utilise dans /usr/local/bin :

 sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/node" "/usr/local/bin/node" sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npm" "/usr/local/bin/npm" 

Cela rend npm et node accessibles à tous les utilisateurs.

Votre problème est que nvm n’est pas dans le chemin lorsque vous utilisez sudo .

Alors tapez

 $ which nvm 

et le résultat sera quelque chose comme

 /home/abc/mynvm/nvm 

Réessayez maintenant avec sudo :

 sudo /home/abc/mynvm/nvm use v0.10.23 

Je suppose que vous rencontrez alors le problème que l’utilisateur root ne peut pas trouver la version 0.10.13, mais voyons le message d’erreur suivant …

J’ai essayé la même chose sur ma machine où j’ai aussi nvm et j’ai une réponse légèrement différente:

 $ sudo node --version sudo: node: command not found 

Je suppose que vous avez installé le noeud 0.11 en dehors de NVM. ( Via le gestionnaire de paquets ou même depuis la source )

Par conséquent, exécuter le noeud via sudo prendrait plutôt ce noeud autonome.

Est-ce que c’est logique ou est-ce que je me trompe?

J’ai aussi eu ton problème. Enfin, j’ai travaillé autour de ça. Voici ma solution:

  1. Désinstallez nvm et nodejs. Voici quelques liens utiles: Désinstallation de nvm . Si vous avez installé nodejs en utilisant apt-get, vous pouvez le désinstaller avec la commande apt-get purge nodejs .
  2. Installez un NVM global. Voir cette page: nvm global . Comme il est dit, “nvm standard a connu des difficultés à travailler dans des environnements multi-utilisateurs ou enracinés.”

Après avoir redémarré votre terminal, vous pouvez exécuter la commande sudo nvm ls .

La raison fondamentale est que nvm n’est pas un vrai programme. C’est une fonction bash qui est chargée dans le .profile , .bashrc ou … Ainsi, sudo ne le sudo pas automatiquement dans $ PATH comme la plupart des autres programmes.

Un autre gestionnaire de version de nœud est n : https://github.com/tj/n . C’est un vrai programme, donc sudo le récupérera via $ PATH sans aucun piratage (tant que sudo a /usr/local/bin dans son $ PATH).

 sudo npm install -gn # install 'n' globally which n # should be /usr/local/bin/n sudo n lts # need sudo to switch node versions node --version # v6.10.0 sudo node --version # v6.10.0 
 $ sudo bash -ic "nvm use stable; npm -v" Now using node v6.3.1 (npm v3.10.3) 3.10.3 

Installez nvm globalement avec
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | sudo bash

La solution la plus simple sera probablement de bash l’exécutable nvm.sh où qu’il se trouve.

 sudo /home/ubuntu/.nvm/nvm.sh install node 

Cela fonctionne bien pour moi (en supposant que c’est le chemin d’installation).

La procédure d’installation complète ressemblerait à

 curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash export NVM_DIR="/home/ubuntu/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" 

Et puis vous pouvez exécuter la commande ci-dessus pour bash le nvm.sh nouvellement installé