NPM - це неправильна версія останньої установки Ubuntu (18.04)


18

Звичайною установкою було б sudo apt install nodejsвстановити Node.js, а потім sudo apt install npmвстановити Node Package Manager. Однак, роблячи це, npm -vкаже 3.5.2. Щоб нормально оновити, я би зробив це sudo npm install -g npm, яке оновлює останню версію (яка на момент написання цієї статті є 6.0.1).

Коли я це роблю which npm, я отримую /usr/local/bin/npm, проте aptвстановлює симпосилання на /usr/bin/npm. Якщо я sudo apt purge npmвидаляю npm, він все ще залишає npm-версію npm у /usr/local/bin/npm, однак npm -vговорить -bash: /usr/bin/npm: No such file or directory.

Багато статей говорять про використання PPA для встановлення nodejs, але я думаю, що для цього слід створити рідний спосіб apt.

Інструкції DigitalOcean щодо нормальної установки та через PPA: https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-18-04

Інструкції TecAdmin щодо встановлення через PPA: https://tecadmin.net/install-latest-nodejs-npm-on-ubuntu/

Відповіді:


31

TLDR: Ця проблема викликана Башем кешування шляху від npmкоманди, і може бути вирішена hash -d npm. Вам навіть не потрібно мати справу, apt purgeякщо не захочете.

Пояснення

Ось мої кроки щодо отримання нової npmверсії на Ubuntu. Спочатку зробіть установку так, як описано в ОП:

$ 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)

Ви можете бачити, що нова версія вже працює добре /usr/local/bin/npm, але, на жаль, кеш Bash все ще має /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)

Щоб усунути проблему, очистіть її з кешу Bash (зробіть це у всіх відкритих оболонках):

$ hash -d npm

Тепер нова версія працює за бажанням:

$ npm -v
6.4.1
$ command -v npm
/usr/local/bin/npm

1
Мені справді подобається ця відповідь краще, ніж моя власна.
Blairg23

Це вирішило мою проблему. Дуже дякую. Відмінне пояснення теж. Єдине, що мені незрозуміло - це точний характер того, чому очищення кеш-пам'яті bash виправляє проблему. Чи не було б краще видалити npmзбережене в /usr/bin/npm? І чому правильна версія підбирається після очищення кеш-файлу, якщо обидві версії залишаються встановленими?
тимчасовий_користувач

12

Я знайшов спосіб очищення npm через sudo apt purge npm, а потім просто відтворити симпосилання до глобальної установки через ln -s /usr/local/bin/npm /usr/bin/npm. Після цього виправлення npm -vповертається 6.0.1як очікувалося.


2
Працював з Ubuntu 18.04 під керуванням UserLAnd на Android 6.0.1. Дякую! :)
l3l_aze

1
ОП, ви повинні позначити це як відповідь.
Роберт Манн

Дивна річ, для мене це було зовсім інакше. У мене була оновлена ​​версія /usr/bin/npm, тому я пішов навпаки ln -s /usr/bin/npm /usr/local/bin/npm. Дивно, але ваша відповідь допомогла мені з’ясувати, як вирішити проблему з неправильною версією.
LordAnomander

2

Щоб мати контроль над встановленою версією npm, я завжди використовую nvm(контроль версій вузла). Ви можете встановити його за допомогою інструкцій тут: https://github.com/creationix/nvm Потім, виконавши наступну команду, встановіть на комп’ютер останній npm:

nvm install node

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.