conflictos de node.js: / sbin / node vs / usr / bin / node

32

Tengo dos máquinas Ubuntu 12.10: la máquina A es una VM VMware y la máquina B es una vieja computadora portátil Acer. En ambas máquinas, instalé el nodo usando apt-get. Sin embargo, la máquina A instala el binario principal como /usr/bin/nodey la máquina B como /usr/bin/nodejs. Aquí hay algunos comportamientos que observé:

  1. Ambas máquinas vuelven /usr/bin/nodeen respuesta al which nodecomando. Sin embargo, no existe dicho archivo en la máquina B.
  2. La emisión del comando nodefunciona para la máquina A, no B. En B, tengo que usar nodejsen su lugar.
  3. En B, hay un binario llamado / sbin / node, A no lo tiene.

Estos comportamientos causan problemas de inconsistencia cuando se desarrollan en ambas máquinas. Por ahora, trabajé cambiando el nombre de los binarios en B como tal:

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

¿Hay alguna manera de arreglar esto realmente, para que ese nodo se instale como en /usr/bin/nodelugar de /usr/bin/nodejs?

Hai Vu
fuente

Respuestas:

15

En Ubuntu 13.10, todas las respuestas anteriores no funcionaron para mí. Finalmente funcionó cuando instalé nodejs-legacy

sudo apt-get install nodejs-legacy

Esto /usr/bin/nodeme lo proporcionó correctamente , por lo que, por ejemplo, nodemonse puede utilizar.

Teetrinker
fuente
¿Alguna idea de por qué necesitamos instalar esto? ¿Realmente crea el enlace simbólico de alguna manera? ¿Por qué el nodo cambió el nombre de su ejecutable a nodejs?
Augustin Riedinger
El nombre "nodo" entró en conflicto con un programa mucho más antiguo. Ver lists.debian.org/debian-devel-announce/2012/07/msg00002.html y la respuesta de Leftium a continuación.
Robie Basak
36

actualización: instrucciones modificadas a continuación para usar el nodejs-legacypaquete. ( más información sobre el legado de nodos )

Intente eliminar completamente el paquete de nodos en conflicto:

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

Esto me sucedió cuando instalé involuntariamente el nodepaquete non-node.js . Aunque lo hice apt-get remove nodeantes de instalar el nodejspaquete correcto , supongo --purgeque se requiere el argumento.

Información de fondo :

Existe un conflicto de nomenclatura con el paquete de nodos (Programa de nodo de radio de paquetes de aficionados), y el binario nodejs ha cambiado de nombre de nodo a nodejs. Tendrá que vincular / usr / bin / node a / usr / bin / nodejs o puede desinstalar el programa de nodo de radio de paquetes de aficionados para evitar ese conflicto.

Leftium
fuente
Gracias por la información de fondo. En este punto, no tengo ninguna de estas máquinas para probar, pero espero poder volver pronto.
Hai Vu
Esto no te da un /usr/bin/nodeen Ubuntu 13.10. Sin embargo, la respuesta de @ user229115 a continuación funciona.
Jim Stewart
1
Entonces, con Ubuntu 13.10 sudo apt-get install nodejs nodejs-legacyle dará el nodebinario como node.js Pero si ya instaló el node(Programa de Nodo de Radio de Paquete Amateur) obviamente necesitará eliminarlo.
jonasfj
1
@AugustinRiedinger: Actualicé mi respuesta. Creo que la combinación de purgar los paquetes 'mal configurados' e instalar el nodejs-legacypaquete funcionará.
Leftium
1
Gracias es muy claro. De hecho, funciona al instalar el nodejs-lecacypaquete, que puede ser solo un enlace simbólico al nodejsejecutable en realidad ...
Augustin Riedinger
11

Desafortunadamente para mí, crear un enlace simbólico no funcionó. Sin embargo, lo que funcionó para mí fue crear un alias. En ~/.bashrco ~/.bash_aliases(si ~/.bashrccarga este archivo), simplemente agregue la siguiente línea:

alias node="nodejs"

Reinicie su sesión de bash escribiendo bashen la consola y su alias ahora funcionará.

Aust
fuente
2
Cuando creé un enlace simbólico, no funcionó hasta que comencé otro terminal. Intente reiniciar su terminal ... o mi respuesta que funciona sin enlaces simbólicos / alias ^^
Leftium
@Leftium: También debe ejecutar: source ~/.bashrcpara volver a cargar el archivo .bashrc (si desea evitar reiniciar el terminal) lea más ..
Deepak Joy
El enlace simbólico en una nueva ubicación casi seguramente necesita una hash nodeinvocación en sus terminales existentes, porque los shells modernos recuerdan la ubicación de los comandos que se han buscado previamente en PATH. El hashcomando incorporado en tales shells les dice que rehagan la búsqueda y recuerden la nueva ubicación.
mtraceur
7

Creo que esto es todo:

alternativas de actualización de sudo --instalar / usr / bin / node node / usr / bin / nodejs 10

Usando alternativas de Debian.

usuario229115
fuente
Gracias. Esta es la forma más directa de remediar la decisión de Ubuntu sobre este asunto.
Dibujó
@drew parece que Ubuntu siguió la decisión de Debian sobre esto basado en los errores de Ubuntu bugs.launchpad.net/ubuntu/+source/node/+bug/1030421 .
Lloyd Dewolf
1

Respuesta tardía, pero para información actualizada ...

Si instala node.js utilizando el método recomendado del archivo léame de instalación de github de nodo , sugiere seguir las instrucciones en el artículo del blog de nodeource , en lugar de instalarlo desde la fecha desactualizada apt-get repo, node.js debería ejecutarse usando el nodecomando, así como el nodejscomando, sin tener que hacer un nuevo enlace simbólico.

Este método del artículo es:

# 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

Tenga en cuenta que esto es para v0.12, que probablemente quedará desactualizado en un futuro no muy lejano.

Además, si está detrás de un proxy corporativo (como yo), deseará agregar la opción -E al comando sudo, para preservar los entornos necesarios para el proxy:

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

En ubuntu 14.04 tuve el mismo problema de nodo. No tenía trabajando "nodo", y trabajando "nodejs". Lo acabo de hacer

sudo apt-get remove node

y justo después de eso, el nodo se estaba ejecutando y nodejs también se está ejecutando :) Soy nuevo en Linux y eso es un misterio para mí. Sin embargo, Bower está funcionando!

Georgi Danchev
fuente
0
sudo getconf LONG_BIT
sudo uname -p
  • Confirme su arquitectura de CPU
  • Encuentre su distribución node.js en el árbol de directorios en https://nodejs.org/dist/ (nota: varias versiones de varias distribuciones node.js para varias arquitecturas de CPU)

Mi escritorio es actualmente Ubuntu 15.10 AMD64, por lo que utilizaré la siguiente URL en mi ejemplo de instalación (nuevamente, las distribuciones varían):

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

Luego cambie el directorio a su directorio de descarga:

sudo cd /home/name/Downloads

Desde su directorio de descargas, ejecute lo siguiente:

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

Confirme su instalación de node.js con lo siguiente:

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

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

Nick indiessance
fuente
1
-1 Solo el tarcomando necesita sudo.
muru
+1 Muchas gracias por esa mejor manera, ¡la mejor manera para mí!
1111161171159459134