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

32

Saya memiliki dua mesin Ubuntu 12.10: mesin A adalah VMWare VM dan mesin B adalah dan laptop Acer lama. Di kedua mesin, saya menginstal node menggunakan apt-get. Namun mesin A menginstal biner utama sebagai /usr/bin/nodedan mesin B sebagai /usr/bin/nodejs. Berikut adalah beberapa perilaku yang saya amati:

  1. Kedua mesin kembali /usr/bin/nodesebagai respons terhadap which nodeperintah. Namun, tidak ada file seperti itu di mesin B.
  2. Mengeluarkan perintah nodebekerja untuk mesin A, bukan B. Pada B, saya harus menggunakan nodejssebagai gantinya.
  3. Pada B, ada biner bernama / sbin / node, A tidak memilikinya.

Perilaku ini menyebabkan masalah inkonsistensi ketika berkembang di kedua mesin. Untuk saat ini, saya bekerja dengan mengubah nama binari pada B seperti:

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

Apakah ada cara untuk benar-benar memperbaiki ini, sehingga simpul itu akan diinstal sebagai /usr/bin/nodegantinya /usr/bin/nodejs?

Hai Vu
sumber

Jawaban:

15

Di Ubuntu 13.10 semua jawaban di atas tidak berfungsi untuk saya. Akhirnya berhasil ketika saya menginstal nodejs-legacy

sudo apt-get install nodejs-legacy

Ini benar disediakan /usr/bin/nodeuntuk saya, sehingga mis nodemondapat digunakan.

Minum teh
sumber
Adakah ide mengapa kita perlu menginstal ini? Apakah ini benar-benar menciptakan symlink? Mengapa node mengubah nama executable menjadi nodejs?
Augustin Riedinger
Nama "simpul" bertentangan dengan program yang jauh lebih tua. Lihat lists.debian.org/debian-devel-announce/2012/07/msg00002.html dan jawaban Leftium di bawah ini.
Robie Basak
36

pembaruan: petunjuk yang diubah di bawah ini untuk menggunakan nodejs-legacypaket. ( info lebih lanjut tentang legacy-legacy )

Coba hapus paket node yang saling bertentangan:

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

Ini terjadi pada saya ketika saya tanpa sadar menginstal paket non-node.js node. Meskipun saya lakukan apt-get remove nodesebelum menginstal nodejspaket yang benar , saya kira --purgeargumen diperlukan.

Info latar belakang :

Ada konflik penamaan dengan paket simpul (Program Paket Radio Amatir Radio), dan biner nodejs telah diganti nama dari node ke nodejs. Anda harus symlink / usr / bin / node ke / usr / bin / nodejs atau Anda bisa menghapus Program Amateur Node Radio Node Program untuk menghindari konflik itu.

Leftium
sumber
Terima kasih atas info latar belakangnya. Pada titik ini, saya tidak memiliki salah satu mesin ini untuk dicoba, tetapi saya harap saya dapat mengunjungi kembali suatu hari nanti.
Hai Vu
Ini tidak membuat Anda mendapatkan /usr/bin/nodedi Ubuntu 13.10. @ user229115 jawaban di bawah ini berfungsi, meskipun.
Jim Stewart
1
Jadi dengan Ubuntu 13.10 sudo apt-get install nodejs nodejs-legacyakan memberi Anda nodebiner sebagai node.js Tetapi jika Anda sudah menginstal node(Paket Radio Node Program Amatir) Anda jelas harus menghapusnya.
jonasfj
1
@AugustinRiedinger: Saya memperbarui jawaban saya. Saya pikir kombinasi keduanya membersihkan paket 'salah konfigurasi' dan menginstal nodejs-legacypaket akan bekerja.
Leftium
1
Terima kasih, ini sangat jelas. Memang itu berfungsi ketika menginstal nodejs-lecacypaket yang mungkin hanya symlink ke nodejsexecutable sebenarnya ...
Augustin Riedinger
11

Sayangnya bagi saya, membuat symlink tidak berhasil. Apa yang berhasil bagi saya adalah membuat alias. Di ~/.bashrcatau ~/.bash_aliases(jika ~/.bashrcmemuat file ini), tambahkan saja baris berikut:

alias node="nodejs"

Mulai ulang sesi bash Anda dengan mengetik bashke konsol dan alias Anda sekarang akan berfungsi.

Aust
sumber
2
Ketika saya membuat symlink, itu tidak berfungsi sampai saya memulai terminal lain. Coba mulai ulang terminal Anda ... atau jawaban saya yang berfungsi tanpa symlink / alias ^^
Leftium
@Leftium: Anda juga perlu menjalankan: source ~/.bashrcuntuk memuat kembali file .bashrc (jika Anda ingin menghindari me-restart terminal) baca selengkapnya ..
Deepak Joy
Menyinkronkan di lokasi baru hampir pasti membutuhkan hash nodedoa di terminal Anda yang sudah ada, karena shell modern mengingat lokasi perintah yang sebelumnya dicari di PATH. The hashperintah builtin pada kulit seperti mengatakan kepada mereka untuk mengulang lookup, dan mengingat lokasi baru.
mtraceur
7

Saya pikir ini dia:

sudo pembaruan-alternatif --instal / usr / bin / node node / usr / bin / nodejs 10

Menggunakan alternatif Debian.

pengguna229115
sumber
Terima kasih. Ini adalah cara paling langsung untuk memperbaiki keputusan Ubuntu tentang masalah ini.
Drew
@drew sepertinya Ubuntu mengikuti keputusan Debian tentang ini berdasarkan bug bugla.launchpad.net/ubuntu/+source/node/+bug/1030421 .
Lloyd Dewolf
1

Jawaban terlambat, tetapi untuk info terbaru ...

Jika Anda menginstal node.js menggunakan metode rekomendasi dari readme instalasi simpul github , disarankan mengikuti petunjuk pada artikel blog nodesource , daripada menginstal dari ketinggalan zaman apt-get repo, node.js harus dijalankan menggunakan nodeperintah, juga nodejsperintahnya, tanpa harus membuat symlink baru.

Metode dari artikel ini adalah:

# 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

Perhatikan bahwa ini untuk v0.12, yang kemungkinan akan menjadi usang dalam waktu yang tidak lama.

Juga, jika Anda berada di belakang proksi perusahaan (seperti saya), Anda ingin menambahkan opsi -E ke perintah sudo, untuk mempertahankan env vars yang diperlukan untuk proxy:

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

Di ubuntu 14.04 saya memiliki masalah simpul yang sama. Saya tidak bekerja "simpul", dan bekerja "simpuljs". saya baru saja melakukannya

sudo apt-get remove node

dan tepat setelah itu, node sedang berjalan, dan nodejs juga sedang berjalan :) Saya baru mengenal linux dan itu salah paham bagi saya. Namun Bower sedang berjalan !!!

Georgi Danchev
sumber
0
sudo getconf LONG_BIT
sudo uname -p
  • Konfirmasikan arsitektur CPU Anda
  • Temukan distribusi node.js Anda di pohon direktori di https://nodejs.org/dist/ (catatan: berbagai versi dari berbagai distribusi node.js untuk berbagai arsitektur CPU)

Desktop saya saat ini adalah Ubuntu 15.10 AMD64, jadi saya akan menggunakan URL berikut dalam contoh instalasi saya (sekali lagi, distrib bervariasi):

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

Kemudian ubah direktori ke direktori unduhan Anda :

sudo cd /home/name/Downloads

Dari direktori unduhan Anda, jalankan yang berikut:

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

Konfirmasikan instalasi node.js Anda dengan yang berikut:

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
sumber
1
-1 Hanya tarperintah yang dibutuhkan sudo.
muru
+1 Terima kasih banyak untuk cara yang lebih baik - cara terbaik untuk saya!
1111161171159459134