NPM là phiên bản không chính xác khi cài đặt Ubuntu (18.04) mới nhất


16

Cài đặt thông thường sẽ là sudo apt install nodejscài đặt Node.js và sau đó sudo apt install npmcài đặt Trình quản lý gói Node. Tuy nhiên, khi làm như vậy, npm -vnói 3.5.2. Để nâng cấp bình thường, tôi sẽ làm sudo npm install -g npm, cập nhật lên phiên bản mới nhất (mà tại thời điểm viết bài viết này là 6.0.1).

Khi tôi làm một which npm, tôi nhận được /usr/local/bin/npm, tuy nhiên aptcài đặt một liên kết tượng trưng tại /usr/bin/npm. Tuy nhiên, nếu tôi sudo apt purge npmloại bỏ npm, nó vẫn để lại phiên bản npm của npm tại /usr/local/bin/npm, tuy nhiên npm -v, nói -bash: /usr/bin/npm: No such file or directory.

Nhiều bài viết nói rằng sử dụng PPA để cài đặt nodejs, nhưng tôi nghĩ nên có một cách riêng để thực hiện điều này apt.

Hướng dẫn về DigitalOcean về cài đặt thông thường và thông qua PPA: https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ub Ubuntu-18-04

Hướng dẫn của TecAdmin về cài đặt thông qua PPA: https://tecadmin.net/install-latest-nodejs-npm-on-ub Ubuntu /

Câu trả lời:


29

TLDR: Vấn đề này là do Bash lưu trữ đường dẫn của npmlệnh và có thể được giải quyết bằng hash -d npm. Bạn thậm chí không cần phải giải quyết apt purgetrừ khi bạn muốn.

Giải trình

Đây là các bước của tôi để có npmphiên bản mới trên Ubuntu. Đầu tiên, thực hiện cài đặt như OP mô tả:

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

Bạn có thể thấy rằng phiên bản mới đã hoạt động tốt /usr/local/bin/npm, nhưng tiếc là bộ đệm Bash vẫn có /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)

Để khắc phục sự cố, xóa nó khỏi bộ đệm Bash (thực hiện điều này trong tất cả các shell mở):

$ hash -d npm

Bây giờ phiên bản mới hoạt động như mong muốn:

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

1
Tôi thực sự thích câu trả lời này tốt hơn của tôi.
Blairg23

Điều này đã giải quyết vấn đề của tôi. Cảm ơn bạn rất nhiều. Giải thích tuyệt vời, quá. Một điều không rõ ràng với tôi là bản chất chính xác của lý do tại sao xóa bộ đệm bash khắc phục vấn đề. Sẽ không tốt hơn để xóa npmlưu trữ tại /usr/bin/npm? Và tại sao phiên bản phù hợp được chọn sau khi xóa bộ đệm bash, nếu cả hai phiên bản vẫn được cài đặt?
temporary_user_name

12

Cách tôi tìm thấy là thanh lọc npm thông qua sudo apt purge npm, sau đó chỉ cần tạo lại một liên kết tượng trưng đến cài đặt toàn cầu thông qua ln -s /usr/local/bin/npm /usr/bin/npm. Sau khi sửa chữa, npm -vtrả lại 6.0.1như mong đợi.


2
Đã hoạt động với Ubuntu 18.04 chạy qua UserLAnd trên Android 6.0.1. Cảm ơn bạn! :)
l3l_aze

1
OP bạn nên đánh dấu đây là câu trả lời.
Robert Munn

Điều kỳ lạ, đối với tôi nó khá khác biệt. Tôi đã có phiên bản cập nhật /usr/bin/npm, vì vậy tôi đã sử dụng tuyến đường ngược lại ln -s /usr/bin/npm /usr/local/bin/npm. Lạ, nhưng câu trả lời của bạn đã giúp tôi tìm ra cách giải quyết vấn đề phiên bản không chính xác.
LordAnomander

2

Để kiểm soát phiên bản npm đã cài đặt, tôi luôn sử dụng nvm(kiểm soát phiên bản nút). Bạn có thể cài đặt nó thông qua các hướng dẫn tại đây: https://github.com/creationix/nvm Sau đó, bằng cách làm theo lệnh cài đặt npm mới nhất trên máy tính của bạn:

nvm install node

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.