Conflits node.js: / sbin / node contre / usr / bin / node

32

J'ai deux machines Ubuntu 12.10: la machine A est une machine virtuelle VMWare et la machine B est et le vieil ordinateur portable Acer. Sur les deux machines, j'ai installé le noeud en utilisant apt-get. Cependant, la machine A installe le binaire principal en tant que /usr/bin/nodeet la machine B en tant que /usr/bin/nodejs. Voici quelques comportements que j'ai observés:

  1. Les deux machines retournent /usr/bin/nodeen réponse à la which nodecommande. Cependant, il n'y a pas de fichier de ce type sur la machine B.
  2. Émettre la commande nodefonctionne pour la machine A, pas B. Sur B, je dois utiliser à la nodejsplace.
  3. Sur B, il existe un fichier binaire appelé / sbin / node, A ne l’a pas.

Ces comportements posent des problèmes d'incohérence lors du développement sur les deux machines. Pour l'instant, j'ai travaillé en renommant les fichiers binaires sur B en tant que tels:

sudo mv /sbin/node /sbin/node-sbin
sudo ln -s /usr/bin/nodejs /usr/bin/node

Existe-t-il un moyen de résoudre ce problème pour que ce noeud soit installé comme /usr/bin/nodeau lieu de /usr/bin/nodejs?

Hai Vu
la source

Réponses:

15

Sur Ubuntu 13.10, toutes les réponses ci-dessus n'ont pas fonctionné pour moi. Cela a finalement fonctionné quand j'ai installé nodejs-legacy

sudo apt-get install nodejs-legacy

Ce correctement fourni /usr/bin/nodepour moi, de sorte que, par exemple, nodemonpeut être utilisé.

Teetrinker
la source
Une idée pourquoi nous avons besoin d'installer ceci? Crée-t-il réellement le lien symbolique? Pourquoi noeud a-t-il changé le nom de son exécutable en nodejs?
Augustin Riedinger
Le nom "noeud" était en conflit avec un programme beaucoup plus ancien. Voir lists.debian.org/debian-devel-announce/2012/07/msg00002.html réponse et de Leftium ci - dessous.
Robie Basak
36

update: instructions modifiées ci-dessous pour utiliser le nodejs-legacypaquet. ( plus d’informations sur node-legacy )

Essayez de supprimer complètement le package de noeud en conflit:

sudo apt-get --purge remove node
sudo apt-get --purge remove nodejs-legacy
sudo apt-get --purge remove nodejs

sudo apt-get install nodejs-legacy

# Confirm it worked
node --version       # v0.10.13
ls -la `which node`  # ... /usr/bin/node -> /etc/alternatives/node

Cela m'est arrivé lorsque j'ai involontairement installé le nodepaquet non-node.js . Bien que je l’ai fait apt-get remove nodeavant d’installer le bon nodejspaquet, j’imagine que l’ --purgeargument est nécessaire.

Informations de fond :

Il y a un conflit de nom avec le paquet de noeud (Amateur Packet Radio Node Program), et le fichier binaire de nodejs a été renommé de noeud à noeudjs. Vous aurez besoin de lier symboliquement / usr / bin / node à / usr / bin / nodejs ou vous pourrez désinstaller le programme Amateur Packet Radio Node pour éviter ce conflit.

Leftium
la source
Merci pour les informations de fond. À ce stade, je n'ai aucune de ces machines à essayer, mais j'espère pouvoir y revenir un jour.
Hai Vu
Cela ne vous donne pas une version /usr/bin/nodeUbuntu 13.10. La réponse de @ user229115 ci-dessous fonctionne cependant.
Jim Stewart
1
Donc, avec Ubuntu 13.10 sudo apt-get install nodejs nodejs-legacy, vous obtiendrez le nodefichier binaire en tant que node.js. Mais si vous avez déjà installé le programme node(Amateur Packet Radio Node Program), vous devrez évidemment le supprimer.
jonasfj
1
@AugustinRiedinger: J'ai mis à jour ma réponse. Je pense que la combinaison de la purge des packages «mal configurés» et de l'installation du nodejs-legacypackage fonctionnera.
Leftium
1
Merci c'est très clair. En effet, cela fonctionne lors de l’installation du nodejs-lecacypaquet qui peut ne représenter qu’un lien symbolique avec l’ nodejsexécutable ...
Augustin Riedinger
11

Malheureusement pour moi, créer un lien symbolique n'a pas fonctionné. Ce qui a bien fonctionné pour moi, c’était de créer un alias. Dans ~/.bashrcou ~/.bash_aliases(si ~/.bashrccharge ce fichier), ajoutez simplement la ligne suivante:

alias node="nodejs"

Redémarrez votre session bash en tapant bashdans la console et votre alias va maintenant fonctionner.

Aust
la source
2
Lorsque j'ai créé un lien symbolique, il ne fonctionnait pas avant de démarrer un autre terminal. Essayez de redémarrer votre terminal ... ou ma réponse qui fonctionne sans liens symboliques / alias ^^
Leftium
@Leftium: Vous devez également exécuter: source ~/.bashrcpour recharger le fichier .bashrc (si vous voulez éviter de redémarrer le terminal), lisez plus ..
Deepak Joy
Symlinking à un nouvel emplacement nécessite presque certainement une hash nodeinvocation dans vos terminaux existants, car les shells modernes se souviennent de l'emplacement des commandes précédemment recherchées dans PATH. La hashcommande intégrée à de tels coques leur dit de refaire la recherche et de se souvenir du nouvel emplacement.
mtraceur
7

Je pense que c'est ça:

sudo update-alternatives --install / usr / bin / node node / usr / bin / nodejs 10

Utiliser les alternatives Debian.

utilisateur229115
la source
Merci. C'est le moyen le plus direct de remédier à la décision d'Ubuntu à ce sujet.
Drew
@drew, il semblerait que Ubuntu ait suivi la décision de Debian sur ce point, en se basant sur le bug de bug d' Ubuntu.launchpad.net/ ubuntu/ +source/node/+ bug/ 1030421 .
Lloyd Dewolf
1

Réponse tardive, mais pour des informations à jour ...

Si vous installez node.js à l’aide de la méthode recommandée à partir du fichier lisez-moi d’installation de github , il est suggéré de suivre les instructions qui figurent dans l’article de blog de la source , plutôt que de l’installer à partir du référentiel d’apt-get obsolète node. ainsi que la nodejscommande, sans avoir à faire un nouveau lien symbolique.

Cette méthode de l'article est:

# Note the new setup script name for Node.js v0.12
curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -

# Then install with:
sudo apt-get install -y nodejs

Notez que ceci concerne la version 0.1, qui deviendra probablement obsolète dans un avenir pas si lointain.

De plus, si vous êtes derrière un proxy d'entreprise (comme moi), vous voudrez ajouter l'option -E à la commande sudo pour conserver les vars env requis pour le proxy:

curl -sL https://deb.nodesource.com/setup_0.12 | sudo -E bash -
Erresen
la source
1

Sur Ubuntu 14.04, j'ai eu le même problème de nœud. Je n'avais pas travaillé "noeud", et "nodejs". je viens de faire

sudo apt-get remove node

et juste après cela, node était en cours d'exécution, et nodejs est également en cours d'exécution :) Je suis nouveau sur Linux et c'est un mystère pour moi. Cependant Bower est en cours d'exécution !!!

Georgi Danchev
la source
0
sudo getconf LONG_BIT
sudo uname -p
  • Confirmez l'architecture de votre CPU
  • Recherchez votre distribution node.js dans l’arborescence de répertoires à l’ adresse https://nodejs.org/dist/ (remarque: différentes versions de diverses distributions node.js pour différentes architectures de CPU).

Mon ordinateur de bureau est actuellement Ubuntu 15.10 AMD64. Je vais donc utiliser l'URL suivante dans mon exemple d'installation (là encore, la distribution varie):

sudo wget https://nodejs.org/dist/v5.0.0/node-v5.0.0-linux-x64.tar.gz

Puis changez de répertoire dans votre répertoire de téléchargement:

sudo cd /home/name/Downloads

À partir de votre répertoire de téléchargement, exécutez les opérations suivantes:

sudo tar -C /usr/local --strip-components 1 -xzf node-v5.0.0-linux-x64.tar.gz

Confirmez votre installation de node.js avec les éléments suivants:

sudo ls -l /usr/local/bin/node
sudo ls -l /usr/local/bin/npm

réf. http://www.hostingadvice.com/how-to/install-nodejs-ubuntu-14-04/

nick indiessance
la source
1
-1 Seule la tarcommande a besoin sudo.
muru
+1 Merci beaucoup pour ce meilleur moyen - le meilleur moyen pour moi!
1111161171159459134