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ติดตั้ง symlink /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 ก่อนอื่นให้ทำการติดตั้งตามที่ 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)

คุณจะเห็นว่าเวอร์ชันใหม่ทำงานได้ดี/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หรือไม่ และทำไมรุ่นที่ถูกต้องหยิบขึ้นมาหลังจากล้างแคช bash หากยังคงติดตั้งทั้งสองเวอร์ชันอยู่
temporary_user_name

12

วิธีที่ผมพบก็คือการล้าง NPM ผ่านsudo apt purge npmแล้วก็สร้าง symlink 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
OP คุณควรทำเครื่องหมายว่านี่เป็นคำตอบ
Robert Munn

สิ่งที่แปลกสำหรับฉันมันค่อนข้างแตกต่าง ผมมีรุ่นที่ปรับปรุงในดังนั้นฉันไปเส้นทางตรงข้ามใช้/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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.