Conflitti di node.js: / sbin / node vs / usr / bin / node


32

Ho due macchine Ubuntu 12.10: la macchina A è una VM VMare e la macchina B è un vecchio laptop Acer. Su entrambe le macchine, ho installato il nodo usando apt-get. Tuttavia, la macchina A installa il binario principale come /usr/bin/nodee la macchina B come /usr/bin/nodejs. Ecco alcuni comportamenti che ho osservato:

  1. Entrambe le macchine ritornano /usr/bin/nodein risposta al which nodecomando. Tuttavia, non esiste tale file sulla macchina B.
  2. Emettere il comando nodefunziona per la macchina A, non B. Su B, devo usare nodejsinvece.
  3. Su B, c'è un binario chiamato / sbin / node, A non ce l'ha.

Questi comportamenti causano problemi di incoerenza durante lo sviluppo su entrambe le macchine. Per ora, ho aggirato rinominando i binari su B come tali:

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

C'è un modo per risolvere davvero questo problema, quindi quel nodo verrà installato come /usr/bin/nodeanziché /usr/bin/nodejs?

Risposte:


15

Su Ubuntu 13.10 tutte le risposte sopra non hanno funzionato per me. Alla fine ha funzionato quando ho installato nodejs-legacy

sudo apt-get install nodejs-legacy

Questo ha fornito correttamente /usr/bin/nodeper me, in modo che ad esempio nodemonpossa essere utilizzato.


Qualche idea sul perché dobbiamo installarlo? In realtà crea il link simbolico in qualche modo? Perché nodo ha cambiato il nome del suo eseguibile in nodejs?
Augustin Riedinger,

Il nome "nodo" era in conflitto con un programma molto più vecchio. Vedi lists.debian.org/debian-devel-announce/2012/07/msg00002.html e la risposta di Leftium di seguito.
Robie Basak,

36

aggiornamento: istruzioni modificate di seguito per utilizzare il nodejs-legacypacchetto ( ulteriori informazioni su node-legacy )

Prova a rimuovere completamente il pacchetto del nodo in conflitto:

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

Questo mi è successo quando ho installato inconsapevolmente non-node.js node pacchetto . Anche se l'ho fatto apt-get remove nodeprima di installare il nodejspacchetto corretto , suppongo che l' --purgeargomento sia obbligatorio.

Informazioni sullo sfondo :

Esiste un conflitto di denominazione con il pacchetto del nodo (Programma nodo radio pacchetto amatoriale) e il file binario nodejs è stato rinominato da nodo a nodejs. Dovrai eseguire il collegamento simbolico / usr / bin / node a / usr / bin / nodejs o potresti disinstallare il programma di nodo radio pacchetto amatoriale per evitare quel conflitto.


Grazie per le informazioni di base. A questo punto, non ho nessuna di queste macchine da provare, ma spero di poter rivisitare presto un giorno.
Hai Vu,

Questo non ti /usr/bin/nodedà un in Ubuntu 13.10. La risposta di @ user229115 qui sotto funziona, però.
Jim Stewart,

1
Quindi con Ubuntu 13.10 sudo apt-get install nodejs nodejs-legacyti darà il file nodebinario come node.js Ma se hai già installato il node(Programma di nodo radio pacchetto amatoriale) dovrai ovviamente rimuoverlo.
jonasfj,

1
@AugustinRiedinger: ho aggiornato la mia risposta. Penso che la combinazione di entrambi l'eliminazione dei pacchetti "non configurati correttamente" e l'installazione del nodejs-legacypacchetto funzionerà.
Leftium,

1
Grazie è molto chiaro Funziona davvero quando si installa il nodejs-lecacypacchetto che in nodejsrealtà potrebbe essere solo un link simbolico all'eseguibile ...
Augustin Riedinger

11

Sfortunatamente per me, la creazione di un collegamento simbolico non ha funzionato. Ciò che ha funzionato per me è stato creare un alias. In ~/.bashrco ~/.bash_aliases(se ~/.bashrccarica questo file), aggiungi la seguente riga:

alias node="nodejs"

Riavvia la sessione bash digitando bashnella console e il tuo alias ora funzionerà.


2
Quando ho creato un collegamento simbolico, non ha funzionato fino a quando non ho avviato un altro terminale. Prova a riavviare il tuo terminale ... o la mia risposta che funziona senza symlink / alias ^^
Leftium

@Leftium: devi anche eseguire: source ~/.bashrcper ricaricare il file .bashrc (se vuoi evitare di riavviare il terminale) leggi di più ..
Deepak Joy,

Il collegamento simbolico in una nuova posizione richiede quasi certamente una hash nodechiamata nei terminali esistenti, poiché le shell moderne ricordano la posizione dei comandi che sono stati precedentemente cercati in PERCORSO. Il hashcomando incorporato in tali shell dice loro di ripetere la ricerca e ricordare la nuova posizione.
mtraceur,


1

Risposta tardiva, ma per informazioni aggiornate ...

Se installi node.js usando il metodo consigliato dal readme di installazione di github del nodo , suggerisce di seguire le istruzioni sull'articolo del blog di nodesource , piuttosto che installare dal repository apt-get obsoleto, node.js dovrebbe essere eseguito usando il nodecomando, così come ilnodejs comando, senza dover creare un nuovo link simbolico.

Questo metodo dall'articolo è:

# 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

Si noti che questo è per v0.12, che probabilmente diventerà obsoleto in un futuro non troppo lontano.

Inoltre, se sei dietro un proxy aziendale (come me) ti consigliamo di aggiungere l'opzione -E al comando sudo, per preservare le variabili env richieste per il proxy:

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

1

Su Ubuntu 14.04 ho avuto lo stesso problema con il nodo. Non avevo "nodo" funzionante e "nodejs" funzionante. L'ho appena fatto

sudo apt-get remove node

e subito dopo, il nodo era in esecuzione, e anche il nodojs è in esecuzione :) Sono nuovo di Linux e questo è un missile per me. Comunque Bower sta funzionando !!!


0
sudo getconf LONG_BIT
sudo uname -p
  • Conferma l'architettura della tua CPU
  • Trova la tua distribuzione node.js nell'albero delle directory su https://nodejs.org/dist/ (nota: varie versioni di varie distribuzioni node.js per varie architetture CPU)

Il mio desktop è attualmente Ubuntu 15.10 AMD64, quindi userò il seguente URL nel mio esempio di installazione (di nuovo, la distribuzione varia):

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

Quindi modificare directory alla vostra directory di download:

sudo cd /home/name/Downloads

Dalla directory di download, eseguire quanto segue:

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

Conferma l'installazione di node.js con quanto segue:

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

rif. http://www.hostingadvice.com/how-to/install-nodejs-ubuntu-14-04/


1
-1 È tarnecessario solo il comando sudo.
muru,

+1 Grazie mille per questo modo migliore - il modo migliore per me!
1111161171159459134,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.