NPM adalah versi yang salah pada instalasi Ubuntu (18.04) terbaru

18

Instalasi normal adalah sudo apt install nodejsmenginstal Node.js dan kemudian sudo apt install npmmenginstal Node Package Manager. Namun, setelah melakukannya, npm -vkata 3.5.2. Untuk meningkatkan secara normal, saya akan lakukan sudo npm install -g npm, pembaruan ke versi terbaru (yang, pada saat penulisan artikel ini, adalah 6.0.1).

Ketika saya melakukan which npm, saya mendapatkan /usr/local/bin/npm, namun aptmenginstal symlink di /usr/bin/npm. Jika saya sudo apt purge npmmenghapus npm, ia tetap meninggalkan versi npm dari npm /usr/local/bin/npm, npm -vkata -bash: /usr/bin/npm: No such file or directory.

Banyak artikel mengatakan untuk menggunakan PPA untuk menginstal nodejs, tapi saya pikir harus ada cara asli untuk melakukan ini apt.

Instruksi DigitalOcean tentang instalasi secara normal dan melalui PPA: https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-18-04

Petunjuk TecAdmin tentang pemasangan melalui PPA: https://tecadmin.net/install-latest-nodejs-npm-on-ubuntu/

Blairg23
sumber

Jawaban:

31

TLDR: Masalah ini disebabkan oleh Bash caching jalan dari npmperintah, dan dapat diselesaikan dengan hash -d npm. Anda bahkan tidak perlu berurusan apt purgekecuali jika Anda mau.

Penjelasan

Inilah langkah-langkah saya untuk mendapatkan npmversi baru di Ubuntu. Pertama, lakukan instalasi seperti yang dijelaskan OP:

$ sudo apt-get install npm
(...apt installation of npm was successful...)
$ npm -v
3.5.2
$ command -v npm
/usr/bin/npm
$ sudo npm install -g npm
(...npm installation of npm was successful...so far, so good)

Anda dapat melihat bahwa versi baru sudah berfungsi dengan baik /usr/local/bin/npm, tetapi sayangnya Bash cache masih memiliki /usr/bin/npm:

$ /usr/local/bin/npm -v
6.4.1
$ npm -v
3.5.2
$ command -v npm
/usr/bin/npm
$ type npm
npm is hashed (/usr/bin/npm)

Untuk memperbaiki masalah, bersihkan dari cache Bash (lakukan ini di semua shell yang terbuka):

$ hash -d npm

Sekarang versi baru berfungsi seperti yang diinginkan:

$ npm -v
6.4.1
$ command -v npm
/usr/local/bin/npm
Krubo
sumber
1
Saya sebenarnya menyukai jawaban ini lebih baik daripada jawaban saya sendiri.
Blairg23
Ini menyelesaikan masalah saya. Terima kasih banyak. Penjelasan yang bagus juga. Satu hal yang tidak jelas bagi saya adalah sifat pasti mengapa menghapus cache bash memperbaiki masalah. Bukankah lebih baik menghapus yang npmtersimpan di /usr/bin/npm? Dan mengapa versi yang benar diambil setelah menghapus cache bash, jika kedua versi tetap diinstal?
temporary_user_name
12

Cara yang saya temukan adalah membersihkan npm melalui sudo apt purge npm, kemudian cukup membuat kembali symlink ke instalasi global melalui ln -s /usr/local/bin/npm /usr/bin/npm. Setelah perbaikan itu, npm -vkembali 6.0.1seperti yang diharapkan.

Blairg23
sumber
2
Bekerja dengan Ubuntu 18.04 yang berjalan melalui UserLAnd di Android 6.0.1. Terima kasih! :)
l3l_aze
1
OP Anda harus menandai ini sebagai jawabannya.
Robert Munn
Aneh, bagi saya itu sangat berbeda. Saya memiliki versi yang diperbarui /usr/bin/npm, jadi saya menggunakan rute yang berlawanan ln -s /usr/bin/npm /usr/local/bin/npm. Aneh, tetapi jawaban Anda membantu saya menemukan cara menangani masalah versi yang salah.
LordAnomander
2

Untuk memiliki kontrol pada versi npm yang diinstal, saya selalu menggunakan nvm(kontrol versi node). Anda dapat menginstalnya melalui instruksi di sini: https://github.com/creationix/nvm Kemudian dengan mengikuti perintah instal npm terbaru di komputer Anda:

nvm install node

Farzad
sumber