522 votes

Impossible d'installer des paquets en utilisant le gestionnaire de paquets node dans Ubuntu

Nom de l'interpréteur NodeJS( node ) sur Ubuntu a été renommé en nodejs en raison d'un conflit de nom avec un autre paquet. Voici ce que dit le readme. Debian dit :

Le nom amont de la commande de l'interpréteur Node.js est " node ". Dans Debian, la commande de l'interpréteur a été changée en " nodejs ".

Cela a été fait pour éviter une collision d'espace de noms : d'autres commandes utilisent le même nom en amont, comme ax25-node du paquet "node". du paquet "node".

Les scripts appelant Node.js comme une commande shell doivent être modifiés pour plutôt utiliser la commande "nodejs".

Cependant, l'utilisation de nodejs nuit à l'installation des paquets en utilisant npm . L'installation du paquet échoue avec l'erreur suivante :

sh: 1: node: not found
npm WARN This failure might be due to the use of legacy binary "node"
npm WARN For further explanations, please read /usr/share/doc/nodejs/README.Debian

Comment faire comprendre à npm que nodejs est déjà installé sur le système mais que le nom de l'interpréteur est différent ?

29 votes

Vous pouvez essayer de ln -s nodejs node sur /usr/bin . Mais c'est un peu du bricolage.

1 votes

@vbo vous pouvez ajouter cela comme réponse - cela résout le problème !

2 votes

@HimelNagRana J'ai une autre réponse (meilleure, acceptée). Mon commentaire initial a également été transformé en réponse ( stackoverflow.com/a/21168305/539686 ).

1109voto

vbo Points 2347

TL;DR :

sudo apt-get install nodejs-legacy

Tout d'abord, permettez-moi de clarifier un peu la situation. Au cours de l'été 2012, les mainteneurs de Debian ont décidé de renommer l'exécutable Node.js pour éviter toute sorte de collision d'espace de noms avec un autre paquet. Cette décision a été très difficile à prendre pour le comité technique de Debian, car elle rompt la rétrocompatibilité.

Ce qui suit est une citation du projet de résolution de la commission, publié dans Debian liste de diffusion :

  1. Le paquetage nodejs doit être modifié pour fournir /usr/bin/nodejs, et non /usr/bin/node. Le paquet doit déclarer une relation Breaks : avec tout paquet de Debian qui fait référence à /usr/bin/node.

  2. Le paquet source nodejs doit également fournir un paquet binaire nodejs-legacy à la priorité : extra qui contient /usr/bin/node comme lien symbolique vers /usr/bin/nodejs. Aucun paquet de l'archive ne peut dépendre ou recommander le paquet nodejs-legacy, qui est fourni uniquement pour les utilisateurs en amont.
    compatibilité. Ce paquet déclare doit également déclarer un Conflit : avec le paquet node.

<...>

Le paragraphe 2 est la solution réelle pour le problème du PO. Le PO devrait essayer d'installer ce paquet au lieu de faire le lien symbolique à la main. Voici un lien vers ce paquet dans l'index des paquets Debian site web .

Il peut être installé en utilisant sudo apt-get install nodejs-legacy .

Je n'ai pas trouvé d'informations sur l'adoption de l'ensemble par les développeurs de NPM, mais je pense que npm Le paquet sera fixé à un moment donné et nodejs-legacy devenir un véritable héritage.

107 votes

Pour résumer : sudo apt-get install nodejs-legacy

59 votes

J'aime les réponses qui expliquent la situation en détail plutôt que de donner une commande à exécuter aveuglément. Ensuite, je peux copier cette info dans les commentaires de ma configuration d'environnement script pour savoir ce qui se passe dans un an quand ça ne marchera pas.

29 votes

En tant que personne, je trouve incroyablement incommode que node ne soit pas node, mais plutôt nodejs, uniquement sur Debian. C'est vraiment, vraiment, vraiment incroyablement stupide de scinder les outils de développement comme ça. En gros, cette décision a créé une situation exceptionnelle pour Debian dans CHAQUE PACKAGE NODEJS ! Je n'ai jamais entendu parler de ce que " node " fait autrement, donc je manque de sympathie ;(

113voto

leorex Points 1002

Essayez de lier node à nodejs. Trouvez d'abord où se trouve nodejs

whereis nodejs

Puis liaison douce entre le noeud et le noeudjs

ln -s [the path of nodejs] /usr/bin/node 

Je suppose que /usr/bin est dans votre chemin d'exécution. Vous pouvez ensuite tester en tapant node ou npm dans votre ligne de commande, et tout devrait fonctionner maintenant.

3 votes

-s crée un lien symbolique (ce qui est souvent le choix préféré), pas un lien dur.

20 votes

Cela fonctionne, mais Réponse de vbo d'installer le nodejs-legacy est plus facile.

2 votes

Je soutiens le commentaire de Don Kirkby et la réponse de vbo. Je pense que la réponse de vbo devrait être la réponse sélectionnée.

45voto

Eduardo Dennis Points 799

Vous pouvez également installer Nodejs en utilisant NVM ou Gestionnaire de version Nodejs Il y a beaucoup de avantages à l'utilisation d'un gestionnaire de versions. L'un d'eux est que vous n'avez pas à vous soucier de ce problème.

Instructions :

sudo apt-get update
sudo apt-get install build-essential libssl-dev

Une fois les paquets prérequis installés, vous pouvez tirer l'installation nvm script de la page GitHub du projet. Le numéro de version peut être différent, mais en général, vous pouvez le télécharger et l'installer avec la syntaxe suivante :

curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh | sh

Cela va télécharger le script et l'exécuter. Elle installera le logiciel dans un sous-répertoire de votre répertoire personnel à l'adresse ~/.nvm . Il ajoutera également les lignes nécessaires à votre ~/.profile pour utiliser le fichier.

Pour avoir accès à la fonctionnalité nvm, vous devrez vous déconnecter et vous reconnecter, ou vous pouvez modifier le fichier ~/.profile afin que votre session actuelle soit informée des changements :

source ~/.profile

Maintenant que vous avez installé nvm, vous pouvez installer des versions isolées de Node.js.

Pour connaître les versions de Node.js qui sont disponibles pour l'installation, vous pouvez taper :

nvm ls-remote
. . .

v0.11.10
v0.11.11
v0.11.12
v0.11.13
v0.11.14

Comme vous pouvez le voir, la version la plus récente au moment où nous écrivons ces lignes est la v0.11.14. Vous pouvez l'installer en tapant :

nvm install 0.11.14

Normalement, nvm utilisera la version la plus récemment installée. Vous pouvez demander explicitement à nvm d'utiliser la version que nous venons de télécharger en tapant :

nvm use 0.11.14

Lorsque vous installez Node.js en utilisant nvm, l'exécutable est appelé node. Vous pouvez voir la version actuellement utilisée par le shell en tapant :

node -v

Le tutoriel complet peut être trouvé ici

3 votes

Cela a également corrigé l'erreur ci-dessus pour moi. C'est beaucoup mieux pour les développeurs nodejs (à mon avis tous les développeurs, je ne suis pas un de ceux qui travaillent dans nodejs). Je l'ai utilisé.

1 votes

J'avais besoin d'établir un lien logiciel entre le nœud nvm et usr/bin/node . Ainsi a couru sudo ln -s /home/www/.nvm/v0.10.36/bin/node /usr/bin/node

2 votes

Je travaille à essayer de comprendre cela depuis des heures C'est la seule solution que j'ai trouvée qui fonctionne. Merci.

20voto

Ritesh Points 201
  1. Installer nvm première utilisation :

    curl https://raw.githubusercontent.com/creationix/nvm/v0.11.1/install.sh | bash
  2. Exécuter la commande

    source ~/.profile
  3. Maintenant, lancez ceci et cela montrera toutes les versions installées ou autres des paquets :

    nvm ls-remote
  4. Les paquets installés seront en vert. Installez la version que vous voulez :

    nvm install 6.0.0
  5. Vérifiez où n'est pas installé :

    which node
  6. Vérifiez la version actuelle :

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

2 votes

Je recommande vivement cette solution pour avoir le contrôle des versions de node et npm à tout moment et pour tout usage.

14voto

XiaoPeng Points 444
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
source ~/.profile

Combiné la réponse acceptée avec source ~/.profile du commentaire qui a été plié et quelques commandes de nettoyage avant. Il est fort probable que vous ayez également besoin de sudo apt-get install npm après.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X