ไม่สามารถติดตั้งแพ็กเกจโดยใช้ node package manager ใน Ubuntu


500

ชื่อล่าม NodeJS ( node) บน Ubuntu ถูกเปลี่ยนชื่อเป็นnodejsเพราะชื่อขัดแย้งกับแพ็คเกจอื่น นี่คือสิ่งที่ readme Debian พูดว่า:

ชื่อ upstream สำหรับคำสั่ง interpreter Node.js คือ "node" ใน Debian คำสั่ง interpreter ถูกเปลี่ยนเป็น "nodejs"

สิ่งนี้ถูกทำขึ้นเพื่อป้องกันการชนกันของเนมสเปซ: คำสั่งอื่น ๆ ใช้ชื่อเดียวกันในอัพสตรีมเช่น ax25-node จากแพ็คเกจ "node"

สคริปต์ที่เรียก Node.js เป็นคำสั่ง shell จะต้องเปลี่ยนเป็นใช้คำสั่ง "nodejs" แทน

อย่างไรก็ตามการใช้ nodejs mucks npmขึ้นการติดตั้งแพคเกจการใช้ การติดตั้งแพคเกจล้มเหลวโดยมีข้อผิดพลาดดังต่อไปนี้:

sh: 1: node: not found
npm WARN This failure might be due to the use of legacy binary "node"
npm WARN For further explanations, please read /usr/share/doc/nodejs/README.Debian

ฉันจะทำให้ npm เข้าใจได้อย่างไรว่า nodejs ติดตั้งไว้แล้วในระบบ แต่ชื่อผู้แปลนั้นแตกต่างกัน?


29
คุณสามารถลองในln -s nodejs node /usr/binมันเป็นแฮ็คชนิดหนึ่ง
vbo

1
@ vbo คุณสามารถเพิ่มเป็นคำตอบ - มันแก้ปัญหาได้!
Himel Nag Rana

2
@HimelNagRana ​​ฉันมีอีกคำตอบ (ดีกว่าได้รับการยอมรับ) ความคิดเห็นเริ่มต้นของฉันก็เปลี่ยนเป็นคำตอบ ( stackoverflow.com/a/21168305/539686 )
vbo

4
ใช้ NVM เพื่อติดตั้งและจัดการเวอร์ชัน Node.js, github.com/creationix/nvmง่ายและสะดวก!
Unitech

2
ฉันขอแนะนำวิธีแก้ปัญหานี้: stackoverflow.com/a/38325376/3197383 เพื่อรับการควบคุมโหนดและเวอร์ชัน npm ได้ตลอดเวลาและสำหรับการใช้งานใด ๆ
Rémi Becheras

คำตอบ:


1094

TL; DR:

sudo apt-get install nodejs-legacy

ก่อนอื่นให้ฉันอธิบายสถานการณ์เล็กน้อย ในฤดูร้อนปี 2012 ผู้ดูแล Debian ตัดสินใจเปลี่ยนชื่อ Node.js ที่สามารถเรียกใช้งานได้เพื่อป้องกันการชนของ namespace กับแพ็คเกจอื่น มันเป็นการตัดสินใจที่ยากมากสำหรับคณะกรรมการด้านเทคนิคของ Debian เพราะมันเข้ากันไม่ได้

ต่อไปนี้เป็นคำพูดจากร่างมติคณะกรรมการเผยแพร่ในรายชื่อผู้รับจดหมายเดเบียน:

  1. แพ็กเกจ nodejs ต้องถูกเปลี่ยนเพื่อให้ / usr / bin / nodejs ไม่ใช่ / usr / bin / node แพ็คเกจควรประกาศตัวแบ่ง: ความสัมพันธ์กับแพคเกจใด ๆ ใน Debian ที่อ้างอิง / usr / bin / node

  2. แพ็คเกจแหล่งที่มาของ nodejs จะต้องจัดให้มีแพคเกจไบนารี nodejs-legacy ที่ลำดับความสำคัญ: พิเศษที่มี / usr / bin / node เป็น symlink ไปยัง / usr / bin / nodejs ไม่มีแพ็กเกจในไฟล์เก็บถาวรอาจขึ้นอยู่กับหรือแนะนำแพ็กเกจ nodejs-legacy ซึ่งจัดทำขึ้นเพื่อ
    ความเข้ากันได้ของupstream เท่านั้น แพคเกจนี้ประกาศจะต้องประกาศ Conflicts: ความสัมพันธ์กับแพคเกจโหนด

< ... >

ย่อหน้าที่ 2 เป็นทางออกที่แท้จริงสำหรับปัญหาของ OP OP ควรลองติดตั้งแพคเกจนี้แทนที่จะทำ symlink ด้วยมือ นี่คือการเชื่อมโยงไปแพคเกจนี้ใน Debian ดัชนีแพคเกจเว็บไซต์

sudo apt-get install nodejs-legacyมันสามารถติดตั้งใช้

ฉันไม่พบข้อมูลใด ๆ เกี่ยวกับการนำสิ่งทั้งหมดมาใช้โดยนักพัฒนา NPM แต่ฉันคิดว่าnpmแพคเกจจะได้รับการแก้ไขในบางจุดและnodejs-legacyกลายเป็นมรดกจริงๆ


106
เพื่อสรุป:sudo apt-get install nodejs-legacy
Alf Eaton

58
ฉันชอบคำตอบที่อธิบายสถานการณ์อย่างละเอียดมากกว่าเพียงแค่ให้คำสั่งดำเนินการอย่างสุ่มสี่สุ่มห้า จากนั้นฉันสามารถคัดลอกข้อมูลนั้นลงในความคิดเห็นในสคริปต์การตั้งค่าสภาพแวดล้อมของฉันเพื่อให้ฉันรู้ว่าสิ่งที่เกิดขึ้นในหนึ่งปีนับจากนี้เมื่อมันไม่ทำงาน
Mnebuerquo

29
ในฐานะบุคคลฉันพบว่ามันไม่สะดวกอย่างไม่น่าเชื่อที่โหนดไม่ใช่โหนด แต่แทนที่จะเป็น nodejs เฉพาะบน Debian เท่านั้น มันเป็นเรื่องที่โง่เขลาจริงๆในการพัฒนาเครื่องมือเช่นนี้ โดยทั่วไปการตัดสินใจครั้งนี้สร้างสถานการณ์ที่ยอดเยี่ยมสำหรับเดเบียนในทุก ๆ แพ็คเกจของ NODEJS! ฉันไม่เคยได้ยินว่า "node" ทำอะไรเป็นอย่างอื่นดังนั้นฉันจึงไม่มีความเห็นอกเห็นใจใด ๆ (
Lodewijk

4
ถ้าฉันไม่มีอะไรหายไปนี่ไม่ใช่การชนกันของชื่อพื้นที่ ไม่มีเนมสเปซมันเป็นการชนชื่อแบบง่าย ๆ ชื่อช่องว่างที่ช่วยให้คุณสามารถมีชื่อเดียวกันสองครั้ง (หรือมากกว่า) ตราบใดที่แต่ละคนมีอยู่ในชื่อที่แตกต่างพื้นที่ ไม่มี "ช่องว่าง" ดังกล่าวสำหรับชื่อปฏิบัติการใน Linux หรือ Unix สิ่งที่ใกล้เคียงที่สุดคือคุณสามารถมีหลายไดเรกทอรีในตัวแปร $ PATH ของคุณและไดเรกทอรีแรกสุดที่มีโปรแกรมเรียกทำงานที่มีชื่อตรงกันจะถูกใช้ (แต่จริงๆแล้วมันต่างจากเนมสเปซจริงๆ)
iconoclast

7
นี้เป็นที่น่ารำคาญมากยิ่งขึ้นดังนั้นความขัดแย้งเพราะชื่อก็มี"มือสมัครเล่นแพ็คเก็ตวิทยุ"
Suzana

113

ลองเชื่อมโยงโหนดกับ nodejs ก่อนอื่นหาที่ nodejs คือ

whereis nodejs

จากนั้นซอฟต์ลิงก์ไปยัง nodejs

ln -s [the path of nodejs] /usr/bin/node 

ฉันสมมติว่า / usr / bin อยู่ในเส้นทางการดำเนินการของคุณ จากนั้นคุณสามารถทดสอบโดยการพิมพ์โหนดหรือ npm ในบรรทัดคำสั่งของคุณและทุกอย่างจะทำงานได้ทันที


3
-s สร้างลิงค์สัญลักษณ์ (ซึ่งมักเป็นตัวเลือกที่ต้องการ) ไม่ใช่ลิงก์ที่ยาก
hyde

20
ใช้งานได้ แต่คำตอบของ vbo ในการติดตั้งnodejs-legacyแพคเกจนั้นง่ายกว่า
Don Kirkby

2
ฉันสองความเห็นของ Don Kirkby และคำตอบของ vbo ฉันคิดว่าคำตอบของ vbo ควรเป็นคำตอบที่เลือก
modulitos

3
ฉันคิดว่ามันสะดวกกว่าเพียงแค่สร้างลิงค์สัญลักษณ์แทนการติดตั้งซอฟต์แวร์เดียวกันสองครั้ง ....
frankies

7
เลขที่ Do not โคลนด้วยนอกจากคุณจะ/usr/bin dpkgวิธีแก้ปัญหาที่เหมาะสม (ถ้าคุณชอบแนวทางการเชื่อมโยงแบบแมนนวลนี้) คือการสร้าง symlink/usr/local/binซึ่งกำหนดไว้สำหรับการติดตั้งและการแทนที่ในเครื่อง ทุกสิ่งที่คุณทำด้วยตนเอง/usr/binสามารถและจะถูกเขียนทับโดยผู้จัดการแพ็คเกจและ / หรือจะทำให้สับสน
tripleee

44

คุณยังสามารถติดตั้ง Nodejs โดยใช้NVMหรือNodejs Version Managerมีประโยชน์มากมายสำหรับการใช้ตัวจัดการเวอร์ชัน หนึ่งในนั้นคือคุณไม่ต้องกังวลกับปัญหานี้


คำแนะนำ:


sudo apt-get update
sudo apt-get install build-essential libssl-dev

เมื่อติดตั้งแพ็คเกจที่จำเป็นต้องมีแล้วคุณสามารถดึงสคริปต์การติดตั้ง nvm จากหน้า GitHub ของโครงการ หมายเลขเวอร์ชั่นอาจแตกต่างกัน แต่โดยทั่วไปคุณสามารถดาวน์โหลดและติดตั้งโดยใช้ไวยากรณ์ต่อไปนี้:

curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh | sh

นี่จะดาวน์โหลดสคริปต์และเรียกใช้ ~/.nvmมันจะติดตั้งซอฟต์แวร์ลงในไดเรกทอรีย่อยของไดเรกทอรีบ้านของคุณที่ มันจะเพิ่มบรรทัดที่จำเป็นลงใน~/.profileไฟล์ของคุณเพื่อใช้ไฟล์

ในการเข้าใช้ฟังก์ชัน nvm คุณจะต้องออกจากระบบและลงชื่อเข้าใช้อีกครั้งหรือคุณสามารถหาแหล่งไฟล์ ~ / .profile เพื่อให้เซสชันปัจจุบันของคุณรู้เกี่ยวกับการเปลี่ยนแปลง:

source ~/.profile

หลังจากที่คุณติดตั้ง nvm แล้วคุณสามารถติดตั้ง Node.js รุ่นแยกได้

หากต้องการค้นหาเวอร์ชันของ Node.js ที่พร้อมใช้งานสำหรับการติดตั้งคุณสามารถพิมพ์:

nvm ls-remote
. . .

v0.11.10
v0.11.11
v0.11.12
v0.11.13
v0.11.14

อย่างที่คุณเห็นเวอร์ชั่นล่าสุดในเวลาที่เขียนนี้คือ v0.11.14 คุณสามารถติดตั้งได้โดยพิมพ์:

nvm install 0.11.14

โดยปกติแล้ว nvm จะเปลี่ยนไปใช้เวอร์ชันที่ติดตั้งล่าสุด คุณสามารถบอก nvm ให้ใช้รุ่นที่เราเพิ่งดาวน์โหลดโดยพิมพ์:

nvm use 0.11.14

เมื่อคุณติดตั้ง Node.js โดยใช้ nvm ไฟล์เรียกทำงานนั้นจะเรียกว่าโหนด คุณสามารถดูเวอร์ชันปัจจุบันที่เชลล์ใช้อยู่โดยพิมพ์:

node -v

สามารถดูบทช่วยสอนที่สมบูรณ์ได้ที่นี่


3
ข้อผิดพลาดนี้แก้ไขได้สำหรับฉันด้วย มันจะดีกว่ามากสำหรับนักพัฒนา nodejs (ในมุมมองของฉันนักพัฒนาทั้งหมดฉันไม่ใช่คนที่ทำงานใน nodejs) ฉันใช้มัน
Ajeeb.KP

1
ฉันต้องการที่จะเชื่อมโยงอ่อน NVM usr/bin/nodeโหนด วิ่งเลยsudo ln -s /home/www/.nvm/v0.10.36/bin/node /usr/bin/node
Jason Kim

2
ฉันพยายามหาวิธีนี้มาหลายชั่วโมงแล้วนี่เป็นทางออกเดียวที่ฉันพบว่าทำงานได้ ขอบคุณ.
w3bMak3r

'ผลประโยชน์' ตอนนี้กลายเป็นลิงก์ที่ตายแล้ว
jaunt

20
  1. ติดตั้งnvmครั้งแรกโดยใช้:

    curl https://raw.githubusercontent.com/creationix/nvm/v0.11.1/install.sh | bash
  2. เรียกใช้คำสั่ง

    source ~/.profile
  3. ตอนนี้เรียกใช้สิ่งนี้และสิ่งนี้จะแสดงว่าจะมีการติดตั้งหรือแพ็คเกจอื่น ๆ ทั้งหมด:

    nvm ls-remote
  4. แพ็คเกจที่ติดตั้งจะเป็นสีเขียว ติดตั้งเวอร์ชันที่คุณต้องการ:

    nvm install 6.0.0
  5. ตรวจสอบที่ไม่ได้ติดตั้ง:

    which node
  6. ตรวจสอบเวอร์ชั่นปัจจุบัน:

    node -v
    
    n=$(which node);
    n=${n%/bin/node}; 
    chmod -R 755 $n/bin/*; 
    sudo cp -r $n/{bin,lib,share} /usr/local
    

2
ฉันขอแนะนำโซลูชันนี้เพื่อรับการควบคุมโหนดและเวอร์ชัน npm ได้ตลอดเวลาและสำหรับการใช้งานใด ๆ
Rémi Becheras

14
sudo apt-get --purge remove node
sudo apt-get --purge remove nodejs-legacy
sudo apt-get --purge remove nodejs

sudo apt-get install nodejs-legacy
source ~/.profile

รวมคำตอบที่ยอมรับด้วยsource ~/.profileจากความคิดเห็นที่ถูกพับและคำสั่งล้างข้อมูลก่อนหน้านี้ ส่วนใหญ่คุณจะต้องsudo apt-get install npmหลังจาก


12

สำหรับฉันปัญหาได้รับการแก้ไขโดย

sudo apt-get remove node
sudo apt-get remove nodejs
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo ln -s /usr/bin/nodejs /usr/bin/node
alias node=nodejs
rm -r /usr/local/lib/python2.7/dist-packages/localstack/node_modules
npm install -g npm@latest || sudo npm install -g npm@latest

10

นี่เป็นอีกวิธีที่ฉันใช้เนื่องจากฉันชอบnเพื่อสลับระหว่างโหนดเวอร์ชันได้ง่าย

บนระบบ Ubuntu ใหม่ให้ติดตั้งโหนด 'system' ก่อน:

curl -sL https://deb.nodesource.com/setup | sudo bash -

จากนั้นติดตั้งโมดูลnทั่วโลก:

npm install -g n

ตั้งแต่โหนดระบบที่ถูกติดตั้งครั้งแรก (เหนือ), ระบบทางเลือกที่สามารถใช้ในการจุดหมดจดไปยังโหนดที่มีให้โดยn ขั้นแรกให้แน่ใจว่าระบบทางเลือกไม่มีอะไรสำหรับโหนด:

update-alternatives --remove-all node

จากนั้นเพิ่มโหนดที่จัดทำโดยn :

update-alternatives --install /usr/bin/node node /usr/local/bin/node 1

เพิ่มโหนดถัดไปที่จัดเตรียมโดยระบบ (โหนดที่ถูกติดตั้งด้วย curl):

update-alternatives --install /usr/bin/node node /usr/bin/nodejs 2

ตอนนี้เลือกโหนดที่จัดทำโดยnโดยใช้เมนูแบบโต้ตอบ (เลือก/usr/local/bin/nodeจากเมนูที่แสดงโดยคำสั่งต่อไปนี้):

update-alternatives --config node

ในที่สุดเนื่องจาก/usr/local/binโดยทั่วไปจะมีลำดับความสำคัญสูงกว่าใน PATH มากกว่า/usr/binจะต้องสร้างนามแฝงต่อไปนี้ (ป้อนใน. bashrc หรือ. zshrc ของคุณ) หากโหนดระบบทางเลือกนั้นมีประสิทธิภาพ มิฉะนั้นโหนดที่ติดตั้งด้วยnใน / usr / local / bin จะมีความสำคัญกว่าเสมอ:

alias node='/usr/bin/node'

n <desired node version number>ตอนนี้คุณสามารถสลับไปมาระหว่างโหนดรุ่นกับ


9

บน Linux Mint 17 ฉันลองทั้งสองวิธี (สร้าง symlink หรือใช้nodejs-legacyแพ็คเกจ) โดยไม่ประสบความสำเร็จ

สิ่งเดียวที่ในที่สุดฉันก็ใช้ ppa จาก Chris Lea:

sudo apt-get purge node-*
sudo apt-get autoremove 
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

โหนดที่ติดตั้งนี้เวอร์ชัน 10.37 และ npm 1.4.28 หลังจากนั้นฉันสามารถติดตั้งแพคเกจทั่วโลก


9

ดังที่คนอื่น ๆ พูดถึงแล้วฉันจะไม่แนะนำให้ใช้ "sudo apt-get" เพื่อติดตั้งโหนดหรือไลบรารีการพัฒนาใด ๆ คุณสามารถดาวน์โหลดเวอร์ชันที่ต้องการได้จากhttps://nodejs.org/dist/v6.9.2/และตั้งค่าสภาพแวดล้อมของคุณ

ฉันจะแนะนำเครื่องมือเช่นnvmและnเพื่อจัดการเวอร์ชันโหนดของคุณ มันสะดวกในการสลับและทำงานกับโมดูลเหล่านี้ https://github.com/creationix/nvm https://github.com/tj/n

หรือเขียน bash พื้นฐานเพื่อดาวน์โหลด zip / tar แยกโฟลเดอร์ย้ายและสร้างลิงค์นุ่ม ๆ เมื่อใดก็ตามที่คุณต้องการอัปเดตเพียงชี้ลิงค์อ่อนเก่าไปยังเวอร์ชันที่ดาวน์โหลดใหม่ เช่นเดียวกับที่ฉันสร้างขึ้นเองฉันสามารถอ้างอิง: https://github.com/deepakshrma/NodeJs-4.0-Reference-Guide/blob/master/nodejs-installer.sh

#Go to home
cd ~
#run command
#New Script
wget https://raw.githubusercontent.com/deepakshrma/NodeJs-4.0-Reference-Guide/master/nodejs-installer.sh 
bash nodejs-installer.sh -v lts
#here -v or --version can be sepecific to 0.10.37 or it could be latest/lts 
#Examples
bash nodejs-installer.sh -v lts
bash nodejs-installer.sh -v latest
bash nodejs-installer.sh -v 4.4.2

6

วิธีง่ายๆจากที่นี่

curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash --
sudo apt-get install nodejs

คุณสามารถระบุเวอร์ชันได้โดยเปลี่ยนค่า setup_x.x ตัวอย่างเช่นเป็น setup_5.x


5

ระบบของคุณไม่สามารถตรวจพบโหนดพา ธ js ไบนารี

1. ซึ่งโหนด

2. จากนั้นซอฟต์ลิงค์ไปยัง nodejs

ln -s [the path of nodejs] /usr/bin/node 

ฉันสมมติว่า / usr / bin อยู่ในเส้นทางการดำเนินการของคุณ จากนั้นคุณสามารถทดสอบโดยการพิมพ์โหนดหรือ npm ในบรรทัดคำสั่งของคุณและทุกอย่างจะทำงานได้ทันที


4

ถอนการติดตั้งเวอร์ชันโหนดใด ๆ ที่คุณมี

sudo apt-get --purge remove node
sudo apt-get --purge remove nodejs-legacy
sudo apt-get --purge remove nodejs

ติดตั้ง nvm (Node Version Manager) https://github.com/creationix/nvm

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash

ตอนนี้คุณสามารถติดตั้งโหนดรุ่นใดก็ได้ที่คุณต้องการและสลับระหว่างรุ่นต่างๆ


FYI - ทุกคนที่ใช้วิธีการด้านบนnvmโปรดทราบว่าแพ็คเกจ nodejs-legacy คือ v0.10.25 (หรืออย่างน้อยนั่นคือสิ่งที่ผมเห็นเมื่อฉันพยายามมัน.)
JaredH

2

ฉันแก้ไขมันยกเลิกการเชื่อมโยง / usr / sbin / node (ซึ่งเชื่อมโยงกับแพ็คเกจ ax25-node) จากนั้นฉันได้สร้างลิงค์ไปยัง nodejs โดยใช้บรรทัดคำสั่งนี้

sudo ln -s /usr/bin/nodejs /usr/bin/node

เนื่องจากแพ็กเกจเช่น karma ไม่ทำงานกับชื่อ nodejs อย่างไรก็ตามการเปลี่ยนบรรทัดแรกของ karma script จาก node เป็น nodejs แต่ฉันชอบที่จะแก้ไขปัญหานี้ทันทีและสำหรับทั้งหมด


1

สำหรับฉันการแก้ไขคือการลบแพ็กเกจโหนด * และแพ็กเกจ npm ด้วย

จากนั้นติดตั้งใหม่เป็น:

sudo apt-get install autoclean
sudo apt-get install nodejs-legacy
npm install

sudo apt-get autocleanทำ "เหมือนกัน" มากกว่าsudo apt-get install autoclean
m3nda

1

ปัญหาไม่ได้อยู่ในตัวติดตั้ง
แทนที่ nodejs ด้วยโหนดหรือเปลี่ยนเส้นทางจาก / usr / bin / nodejs เป็น / usr / bin / node


1

นี่เป็นโหนดของคุณติดตั้งไม่ถูกต้องก่อนอื่นคุณต้องถอนการติดตั้งโหนดจากนั้นติดตั้งอีกครั้ง ในการติดตั้งโหนดสิ่งนี้อาจช่วยคุณได้ http://array151.com/blog/nodejs-tutorial-and-set-up/

หลังจากนั้นคุณสามารถติดตั้งแพ็คเกจได้อย่างง่ายดาย ในการติดตั้งแพ็คเกจนี้อาจช่วยคุณได้

http://array151.com/blog/npm-node-package-manager/


0

คุณสามารถสร้างลิงค์ln -s nodejsโหนดด้วย/usr/bin ความหวังว่าสิ่งนี้จะช่วยแก้ปัญหาของคุณ

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