Conflitos node.js: / sbin / node vs / usr / bin / node

32

Eu tenho duas máquinas Ubuntu 12.10: a máquina A é uma VM do VMWare e a máquina B e o laptop Acer antigo. Nas duas máquinas, instalei o nó usando o apt-get. No entanto, a máquina A instala o binário principal como /usr/bin/nodee a máquina B como /usr/bin/nodejs. Aqui estão alguns comportamentos que observei:

  1. Ambas as máquinas retornam /usr/bin/nodeem resposta ao which nodecomando. No entanto, não existe esse arquivo na máquina B.
  2. Emitir o comando nodefunciona para a máquina A, não para B. Em B, eu tenho que usar nodejs.
  3. Em B, existe um binário chamado / sbin / node, A não o possui.

Esses comportamentos causam problemas de inconsistência no desenvolvimento nas duas máquinas. Por enquanto, trabalhei renomeando os binários em B da seguinte forma:

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

Existe uma maneira de realmente corrigir isso, para que o nó seja instalado como em /usr/bin/nodevez de /usr/bin/nodejs?

Hai Vu
fonte

Respostas:

15

No Ubuntu 13.10, todas as respostas acima não funcionaram para mim. Finalmente funcionou quando instalei o nodejs-legacy

sudo apt-get install nodejs-legacy

Isso /usr/bin/nodeme forneceu corretamente , para que, por exemplo, nodemonpossa ser usado.

Teetrinker
fonte
Alguma idéia de por que precisamos instalar isso? Ele realmente cria o link simbólico de alguma forma? Por que o nó alterou o nome de seu executável para nodejs?
Augustin Riedinger
O nome "nó" entra em conflito com um programa muito mais antigo. Veja lists.debian.org/debian-devel-announce/2012/07/msg00002.html e a resposta de Leftium abaixo.
Robie Basak 30/05
36

update: instruções modificadas abaixo para usar onodejs-legacy pacote. ( mais informações sobre node-legacy )

Tente remover completamente o pacote do nó conflitante:

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

Isso aconteceu comigo quando instalei involuntariamente o non-node.js node pacote . Embora eu tenha feito apt-get remove nodeantes de instalar o nodejspacote correto , acho que o --purgeargumento é necessário.

Informação de fundo :

Há um conflito de nomenclatura com o pacote do nó (Programa de Nó do Amateur Packet Radio) e o binário do nodejs foi renomeado de node para nodejs. Você precisará vincular / usr / bin / node a / usr / bin / nodejs ou poderá desinstalar o programa Amateur Nó de rádio por pacotes para evitar esse conflito.

Leftium
fonte
Obrigado pela informação de segundo plano. Neste momento, não tenho nenhuma dessas máquinas para experimentar, mas espero poder revisitar algum dia em breve.
Hai Vu
Isso não dá a você um /usr/bin/nodeno Ubuntu 13.10. A resposta de @ user229115 abaixo funciona, no entanto.
Jim Stewart
1
Portanto, com o Ubuntu 13.10 sudo apt-get install nodejs nodejs-legacyvocê terá o nodebinário como node.js. Mas se você já instalou o node(Programa de Nó de Rádio de Pacotes Amador), obviamente precisará removê-lo.
jonasfj
1
@AugustinRiedinger: Eu atualizei minha resposta. Eu acho que a combinação de remover os pacotes 'configurados incorretamente' e instalar o nodejs-legacypacote funcionará.
Leftium
1
Obrigado, é muito claro. Na verdade ele funciona ao instalar o nodejs-lecacypacote que pode ser apenas um link simbólico para o nodejsexecutável, na verdade ...
Augustin Riedinger
11

Infelizmente para mim, a criação de um link simbólico não funcionou. O que funcionou para mim foi criar um apelido. Em ~/.bashrcou ~/.bash_aliases(se ~/.bashrccarregar este arquivo), basta adicionar a seguinte linha:

alias node="nodejs"

Reinicie sua sessão bash digitando bashno console e seu alias agora funcionará.

Aust
fonte
2
Quando criei um link simbólico, ele não funcionou até iniciar outro terminal. Tente reiniciar seu terminal ... ou a minha resposta que funciona sem links simbólicos / aliases ^^
Leftium
@Leftium: Você também precisa correr: source ~/.bashrcpara recarregar o arquivo .bashrc (se você quiser evitar a reinicialização do terminal) ler mais ..
Deepak Joy
A ligação simbólica em um novo local quase certamente precisa de uma hash nodechamada em seus terminais existentes, porque os shells modernos lembram o local dos comandos que foram pesquisados ​​anteriormente no PATH. O hashcomando embutido em tais shells diz para refazer a pesquisa e lembrar o novo local.
Mtraceur # 15/17
7

Eu acho que é isso:

sudo update-alternative - install / usr / bin / nó nó / usr / bin / nodejs 10

Usando alternativas Debian.

user229115
fonte
Obrigado. Esta é a maneira mais direta de remediar a decisão do Ubuntu sobre esse assunto.
Desenhou
O @drew parece que o Ubuntu seguiu a decisão do Debian sobre isso com base nos erros do bugs.launchpad.net/ubuntu/+source/node/+bug/1030421 .
Lloyd Dewolf
1

Resposta tardia, mas para informações atualizadas ...

Se você instalar o node.js usando o método recommend do leia - me de instalação do github do , é recomendável seguir as instruções no artigo do blog nodesource , em vez de instalar a partir do apt-get repo desatualizado, o node.js deve ser executado usando o nodecomando bem como o nodejscomando, sem precisar fazer um novo link simbólico.

Este método do artigo é:

# 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

Observe que isso é para a v0.12, que provavelmente ficará desatualizado no futuro não distante.

Além disso, se você estiver atrás de um proxy corporativo (como eu), desejará adicionar a opção -E ao comando sudo, para preservar os ambientes necessários para o proxy:

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

No ubuntu 14.04 , tive o mesmo problema de nó. Eu não estava trabalhando "node" e trabalhando "nodejs". eu apenas fiz

sudo apt-get remove node

e logo em seguida, o nó estava rodando e o nodejs também está rodando :) Eu sou novo no linux e isso é uma missão para mim. No entanto Bower está funcionando !!!

Georgi Danchev
fonte
0
sudo getconf LONG_BIT
sudo uname -p
  • Confirme sua arquitetura de CPU
  • Encontre sua distribuição node.js na árvore de diretórios em https://nodejs.org/dist/ (nota: várias versões de várias distribuições node.js para várias arquiteturas de CPU)

No momento, minha área de trabalho é o Ubuntu 15.10 AMD64, então usarei a seguinte URL no meu exemplo de instalação (novamente, as distribuições variam):

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

Em seguida, mude o diretório para o diretório de download:

sudo cd /home/name/Downloads

No diretório de download, execute o seguinte:

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

Confirme sua instalação do node.js. com o seguinte:

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

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

nick indiessance
fonte
1
-1 Apenas o tarcomando precisa sudo.
Muru
+1 Muito obrigado por esse caminho melhor - o melhor caminho para mim!
1111161171159459134