Kesalahan "Tidak ada file atau direktori" saat menggunakan npm

34

Saya menginstal node dan npm menggunakan instruksi yang disediakan di sini

Saya berhasil menggunakan simpul. Namun, ketika saya mencoba untuk menginstal modul node "Formidable", saya mendapatkan kesalahan berikut:

$npm install formidable
bash: /usr/local/bin/npm: /usr/local/bin/node: bad interpreter: No such file or directory

Ketika saya melakukan which npmsaya mendapatkan output berikut:

$which npm
/usr/local/bin/npm

Saya tidak tahu apa yang salah dengan npm di sini - ada ide bagaimana saya bisa memperbaikinya?

pengguna109187
sumber
Selamat Datang di Tanya Ubuntu! Saya melihat Anda sudah menginstal Node di /usr/local/bin/. Paket-paket yang Anda gunakan dalam instruksi yang Anda tautkan tidak melakukan hal ini. Saya pikir Anda telah menginstal Node lain dari sumber juga. Tolong ceritakan seluruh cerita.
gertvdijk
@ gertvdijk Nah, awalnya ada node 0.8.14 yang diinstal. Saya ingin memutakhirkan ini ke 0.8.18. Saya kemudian berlari $sudo apt-get remove --purge nodejs npmtetapi ini tidak berhasil. node --versionsetelah menginstal 0.8.18 masih menunjukkan 0.8.14. Jadi, apa yang saya lakukan adalah mengikuti posting yang tidak dapat saya temukan sekarang - itu pada dasarnya diinstruksikan untuk which nodediikuti oleh rm -r /usr/local/bin/...- pada dasarnya beberapa file terkait node di bawah direktori itu. Sekarang, setelah ini, saya menginstal ulang node dan itu adalah versi yang diperbarui. Ini bekerja dengan baik, tetapi npm tidak.
user109187
Ya inilah yang terjadi ketika Anda menginstal dari sumber. Ini akan membingungkan manajemen paket Anda dan Anda sebagai pengguna. Harap hanya instal perangkat lunak sebagai paket kecuali Anda tahu apa yang Anda lakukan. Gunakan instruksi penghapusan instalan dengan skrip yang Anda gunakan untuk menginstal versi sebelumnya untuk menghapusnya dengan benar. Dan silakan edit pertanyaan Anda untuk memberikan informasi lebih lanjut. Ini adalah situs tanya jawab, bukan forum diskusi, Anda tahu? :)
gertvdijk
@ gertvdijk Saya menemukan posting yang diinstruksikan untuk menghapus file secara manual - stackoverflow.com/a/5917184/1907800 . Path di sini adalah / usr / bin / node
user109187

Jawaban:

51

Mengambil petunjuk @gertvdijk, saya menghapus NPM menggunakan skrip:

rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/npm*

(yang dapat ditemukan di sini )

Bahkan setelah melakukan hal di atas, saya mendapat kesalahan lain:

$ npm install formidable  
bash: /usr/local/bin/npm: No such file or directory

Jadi, saya berlari hash -rdi terminal (sesuai instruksi yang ditemukan di bawah NPM Won't Run After Upgrade ) dan voila - itu berhasil. NPM sekarang berfungsi!

pengguna109187
sumber
1
satu-satunya hal yang berguna di sini adalah menemukan hash, yang dapat dengan mudah digunakan untuk menunjuk ke node / npm lain (bagaimana jika saya ingin bekerja dengan lebih dari satu versi node?)
user309383
Pengguna tamu yang cantik.
LM_Fielding
4
hash -r menyelamatkan saya
diogo.abdalla
apa hashfungsinya !?
Chanjung Kim
11

Ubuntu dan beberapa distribusi Linux menginstal penerjemah simpul sebagai /usr/bin/nodejs, dan bukan /usr/local/bin/node.

Anda dapat mengatasi masalah ini dengan menginstal nodejs-legacypaket yang membuat symlink dari /usr/bin/nodejske /usr/bin/node.

Larutan:

sudo apt-get install nodejs-legacy

Referensi: paket nodejs-legacy

Pac
sumber
1
Sepertinya nodejs-legacytidak ada lagi.
Martín De la Fuente
2

Tampaknya Anda telah menginstal versi Node lain dari sumber beberapa waktu sebelumnya. Ini ditunjukkan oleh /usr/local/binjalur tempat tampaknya diinstal sekarang.

  1. Hapus instalan yang Anda instal dari sumber. Lihat instruksi yang didapat dari sumber tentang cara melakukannya. Tidak ada cara tunggal untuk menghapus instalasi skrip perangkat lunak yang diinstal yang tidak berfungsi dengan manajemen paket sistem Anda.
  2. Instal paket dengan tercantum dalam instruksi yang Anda tautkan dalam pertanyaan Anda.
  3. Pastikan which npmsekarang daftar /usr/binsebagai jalur instalasi.

Secara umum Anda tidak perlu menginstal paket dari sumber. Dan jika Anda melakukannya, perlu diketahui konsekuensinya karena Anda mengesampingkan manajemen paket di sini dan itu akan menjadi bingung karenanya.

gertvdijk
sumber