nodejs vs node บน Ubuntu 12.04


363

ฉันติดตั้ง nodejs บน Ubuntu จากคำแนะนำที่ให้ไว้ที่นี่

เมื่อฉันเขียนnode --versionใน terminal ฉันเห็นสิ่งนี้:
-bash: /usr/sbin/node: No such file or directory

ฉันสามารถดูโหนดใน/usr/sbin/ไดเรกทอรีได้

การเขียนnpm --versionแสดง1.3.5
การเขียนnodejs --versionแสดงv0.10.15

นอกจากนี้ฉันสามารถดูโหนดใน/usr/bin/ไดเรกทอรี

ดังนั้นฉันจะnodeทำงานได้อย่างไร

นอกจากนี้ถ้าฉันใช้zshแทนทุบตีแล้วnodeคำสั่งทำงาน


1
ถ้า "คุณเห็นโหนดใน / usr / bin /" แล้วผลลัพธ์ของls -l /usr/bin/nodeคืออะไร?
randunel

1
@ Randunel ฉันได้รับผลลัพธ์นี้lrwxrwxrwx 1 root root 22 Jan 1 2013 /usr/bin/node -> /etc/alternatives/node
Jatin

คุณทำการเปลี่ยนแปลงใด ๆ กับเชลล์ rc หรือไม่?
randunel

ดูเหมือนว่าปัญหาเชลล์หลังจากแก้ไขของคุณexport | grep PATHเอาต์พุตอะไรที่ไม่ได้ใช้zsh? (ควรพิมพ์/usr/binเหนือสิ่งอื่นใด)
randunel

1
โซลูชัน + คำอธิบายที่นี่: stackoverflow.com/questions/21168141/…
throbi

คำตอบ:


599

/usr/bin/nodeคุณจำเป็นต้องสร้างด้วยตนเองลิงก์สัญลักษณ์ ทางลัดสำหรับ bash shell ที่ใช้ร่วมกันได้:

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

หรือถ้าคุณใช้กระสุนที่ไม่ได้มาตรฐานก็แค่ทำการ hardcode เส้นทางที่คุณพบด้วยwhich nodejs:

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

แก้ไขภายหลัง

ฉันพบคำอธิบายนี้ในลิงก์ที่คุณโพสต์

มีความขัดแย้งในการตั้งชื่อกับแพ็กเกจโหนด (Amateur Packet Radio Node Program) และโหนด nodejs ถูกเปลี่ยนชื่อจากโหนดเป็น nodejs คุณจะต้อง symlink / usr / bin / node ไปยัง / usr / bin / nodejs หรือคุณสามารถถอนการติดตั้งโปรแกรมโหนดวิทยุสมัครเล่นแพ็คเก็ตเพื่อหลีกเลี่ยงความขัดแย้งนั้น

ภายหลังแก้ไขภายหลัง

ไม่นานมานี้ตั้งแต่ฉันตอบคำถามนี้ แม้ว่าโซลูชันที่ฉันโพสต์ที่นี่ทำงานให้ฉันหลายครั้ง แต่ผู้ใช้รายงานวิธีแก้ไขเพิ่มเติมภายในความคิดเห็น:

จาก @ user229115

sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10

จาก AskUbuntu (ผู้ใช้ที่เหลือ)

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

ตกลง! แม้ว่าถ้าฉันใช้zshแล้วnodeคำสั่งทำงาน
Jatin

1
นอกจากนี้ฉันจะถอนการติดตั้งโปรแกรม Amateur Packet Radio Node ได้อย่างไร ฉันพยายามsudo apt-get remove nodeแต่มันบอกว่าPackage node is not installed, so not removed
Jatin

คุณไม่จำเป็นต้องถอนการติดตั้งหลังจากความคิดเห็นของคุณนี่เป็นปัญหาเชลล์ไม่ใช่ปัญหาแพ็กเกจโหนด
randunel

@ randunel คำตอบไม่ได้ผลสำหรับฉันเหมือน/usr/bin/env nodeจะไม่ทำงาน วิธีการแก้ปัญหาของ @ BennyMcBenBen ทำงานได้
francoisrv

2
@ Tino คำตอบคือคำตอบที่ถูกต้องดูnodejs-legacyคำอธิบายของแพ็คเกจ คำตอบที่ลิงก์โดย @BennyMcBenBen ได้รับการอัปเดตด้วยคำแนะนำที่คล้ายกันเช่นกัน
tricasse

88

ฉันคิดว่านี่คือ:

sudo ปรับปรุงทางเลือก - ติดตั้ง / usr / bin / โหนดโหนด / usr / bin / nodejs 10

ใช้ทางเลือก Debian


3
นี่น่าจะเป็นตัวเลือกที่ดีกว่าคำตอบที่ยอมรับเพราะมันจะไม่เปลี่ยน / usr / bin / โฟลเดอร์ด้วยตนเองและใช้โครงสร้างพื้นฐานเป็นคำสั่งทางเลือก
Dominik Fretz

ยังไม่ได้ลอง แต่ฉันดูupdate-alternativeเอกสาร ถ้ามันได้ผลจริงๆแล้วมันเป็นทางออกที่ดี :)
randunel

3
คุณจะเจาะจงได้มากขึ้นว่าสิ่งนี้กำลังทำอะไรอยู่?
bcorso

@DominikFretz meh ผลลัพธ์สุดท้ายนั้นเหมือนกันทุกประการโดยใช้คำสั่ง Debian เฉพาะเมื่อเทียบกับ POSIX ที่สอดคล้องกัน (คุณจะได้ทำupdate-alternatives --install /usr/local/bin/fribjazt node /usr/bin/nodejs 10.) โดยให้แต่ละคนของเขาเอง lnแต่ฉันชอบธรรมดา
kojiro

2
ฉันต้องsource ~/.bashrcทำสิ่งนี้เพื่อให้มีผล
iNulty

64

เห็นได้ชัดว่าการแก้ปัญหาแตกต่างระหว่างรุ่น Ubuntu ทำงานได้สำหรับฉันใน Ubuntu 13.10:

sudo apt-get install nodejs-legacy

HTH

แก้ไข: กฎของหัวแม่มือ:

หากคุณติดตั้งnodejsแต่ไม่มี/usr/bin/nodeไบนารีอยู่ให้ติดตั้งnodejs-legacyด้วย นี่เพิ่งสร้าง softlink ที่ขาดหายไป

จากการทดสอบของฉัน Ubuntu 17.10 ขึ้นไปมีการติดตั้งsoftlink /usr/bin/nodeที่ใช้งานได้หลังจากnodejsติดตั้งแล้วจึงnodejs-legacyหายไปจากรีลีสเหล่านี้เนื่องจากไม่จำเป็นต้องใช้อีกต่อไป


ดูเหมือนว่า nodejs-legacy จะไม่ถูกดูแลรักษาอีกต่อไป การหยุดสร้างครั้งล่าสุดเมื่อ 2013-04-10
francoisrv

8
nodejs-legacyต้องการการบำรุงรักษาไม่มาก มันเพิ่ม softlink ที่คล้ายกับsudo ln -s nodejs /usr/bin/nodeอย่างน้อยใน LTS 14.04
Tino

4
บน Ubuntu 14.04, nodejs และ nodejs-legacy ติดตั้ง Node เวอร์ชันเดียวกัน (0.10.25) +1 ถึง @Tino
Mark E. Haase

ใช้งานได้สำหรับฉันใน Debian Jessie เช่นกัน นี่ควรเป็นคำตอบที่ยอมรับได้เนื่องจากนี่คือสิ่งที่มีความหมาย เฉพาะผู้ที่ใช้แพ็คเกจวิทยุสมัครเล่นเท่านั้นที่ไม่ควรทำเช่นนี้ ฉันสงสัยว่าทำไมพวกเขาไม่เปลี่ยนชื่อแพ็คเกจวิทยุเหมือนที่พวกเขาทำด้วยโครเมียม -su
Jérôme

สิ่งนี้จะส่งผลให้มี 2 อินสแตนซ์ของโหนดบนระบบของคุณและจะไม่ถูกดูแลรักษาอีกต่อไป ... แนะนำให้คุณเชื่อมโยงไปยัง nodejs แทน
PodTech.io

30

ฉันมีปัญหาเดียวกันใน Ubuntu 14.04

ฉันได้ติดตั้ง "nodejs" และใช้งานได้ แต่ถ้าฉันใช้คำสั่ง "nodejs" ถ้าฉันพยายามใช้ "node" ไม่มีอะไรเกิดขึ้น

ฉันแก้ไขปัญหานี้ในวิธีถัดไป:

  1. ติดตั้ง nodejs-legacy

    sudo apt-get install nodejs-legacy

หลังจากนั้นเมื่อฉันพิมพ์ "node" ในบรรทัดคำสั่งฉันได้รับข้อความแสดงข้อผิดพลาด "/ usr / sbin / node: ไม่มีไฟล์หรือไดเรกทอรี"

  1. ประการที่สองสิ่งที่ฉันทำก็คือลิงค์สัญลักษณ์บน "nodejs":

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

4
มีบางสิ่งที่แปลกในระบบของคุณ nodeควรจะติดตั้งลงและไม่ได้/usr/bin/ /usr/sbin/ดูเหมือนฉันว่าคุณได้ติดตั้งnodeแพคเกจUbuntu จาก hamradio มาก่อน (ดูpackages.ubuntu.com/trusty/all/node/filelist ) และลืมที่จะทำงานhash -rในระดับเชลล์ดังนั้นเชลล์ยังจำเส้นทางผิดได้ lnแก้ไขครั้งที่สองเช่นกัน แต่ไม่จำเป็นหลังจากคุณออกจากเชลล์ไปแล้ว
Tino

BTW แม้แต่คำตอบที่ผิดก็เป็นสิ่งที่ดีที่จะอธิบายปัญหาทั้งหมดเนื่องจากแพ็คเกจสามชื่อที่คล้ายกันทั้งหมด: node( /usr/sbin/nodeสำหรับบางสิ่งที่แตกต่างอย่างสิ้นเชิง), nodejs( /usr/bin/nodejs) และnodejs-legacy( /usr/bin/nodeขึ้นอยู่กับแพคเกจnodejs)
Tino

เรื่องนี้เกิดขึ้นกับฉันเช่นกัน ฉันได้ติดตั้งโหนดจากแหล่งที่มาบางครั้งแล้ว ในขณะที่node -v => 0.10.2 nodejs -v => 5.5.0การรันคำสั่งwhich nodeชี้ไปที่การติดตั้งในเครื่องนี้เสมอ ในที่สุดฉันต้องunset NODE_PATHซึ่งชี้ไปที่การติดตั้งในท้องถิ่นเพื่อแก้ไข หลังจากนี้node -v => 5.5.0และnpm install เริ่มทำงานกับแพ็คเกจขึ้นอยู่กับ Node => 5.0
CHsurfer

11

เรื่องนี้เกิดขึ้นกับฉันเช่นกัน

node -v => 0.10.2
nodejs -v => 5.5.0

ปัญหาคือว่าฉันได้ติดตั้งโหนดจากแหล่งที่มาบางเวลาที่ผ่านมา วิ่ง

which node

ชี้ไปที่การติดตั้งในเครื่องนี้เสมอ นอกจากนี้

echo NODE_PATH

ชี้ไปที่การติดตั้งท้องถิ่น

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

unset NODE_PATH
sudo apt-get --purge remove nodejs
sudo apt-get install nodejs

หลังจากนี้,

node -v => 5.5.0

และการติดตั้ง npm เริ่มทำงานกับแพ็คเกจขึ้นอยู่กับ Node => 5.0


สิ่งนี้ใช้ได้สำหรับฉัน น่าเสียดายที่ฉันไปรอบ ๆ เป็นเวลาหนึ่งชั่วโมงก่อนที่จะพบมัน
Dustin Fraker

11

Node Version Manager (nvm)

หากคุณต้องการติดตั้งหลายรุ่น nodejs และง่ายดายสลับระหว่างพวกเขาผมจะแนะนำให้ใช้โหนดเวอร์ชัน Manger นอกจากนี้ยังแก้ปัญหาการตั้งชื่อ ( nodevs nodejs)

มันค่อนข้างง่าย:

ติดตั้งเวอร์ชัน nodejs:

$ nvm install 4.4

ตอนนี้คุณมี nodejs 4.4 นอกเหนือจากเวอร์ชันที่ติดตั้งแล้วและคุณสามารถใช้nodeคำสั่งเพื่อเข้าถึงเวอร์ชันที่ติดตั้งใหม่:

$ node -v    // The new version added by nvm.
v4.4.5
$ nodejs -v  // The OS version is untouched and still available.
v0.10.25

คุณสามารถติดตั้งเวอร์ชัน nodejs เพิ่มเติมและสลับระหว่าง:

$ nvm install 6.2
$ nvm use 6.2
Now using node v6.2.1 (npm v3.9.3)
$ node -v
v6.2.1
$ nvm use 4.4
Now using node v4.4.5 (npm v2.15.5)

2
ว่าสามารถแก้ไขปัญหาของฉันขอบคุณมากผมพบว่าบางคำสั่งที่มีประโยชน์สำหรับnvmในวิธีการติดตั้ง Node.js บนเซิร์ฟเวอร์ Ubuntu 14.04
Huy เหงียน

1
สิ่งนี้ใช้ได้สำหรับฉัน นอกจากนี้ยังมีคำแนะนำที่นี่: digitalocean.com/community/tutorials/…
Koen Cornelis

10

ฉันใหม่ทั้งหมดนี้ แต่สำหรับฉันนามแฝงง่ายทำงาน:

alias node='env NODE_NO_READLINE=1 rlwrap nodejs'

อย่างน้อยสำหรับการเรียกใช้สิ่งต่าง ๆ โดยตรงใน bash และเรียกใช้ไฟล์. js


rlwrapโดยไม่ต้องทำงาน ขอบคุณ!
ชูริ

ขอบคุณ @Phill คุณยอดเยี่ยม!
Yusril Herlian Syah

9

วิธีการเกี่ยวกับการใช้คำแนะนำอย่างเป็นทางการจากเว็บไซต์ nodejs :

สำหรับ v7:

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

สำหรับ v6:

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

สำหรับ v4:

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

ฉันได้ทดสอบสิ่งเหล่านี้จาก Windows bash (ผ่านระบบย่อยสำหรับ Linux - 14.04) และ raspbian (ARM Debian based) การรันsudo apt-get install -y nodejsโดยไม่รันสคริปต์การตั้งค่าครั้งแรกจะส่งผลให้คุณได้รับโหนด 0.10

หากคุณวางแผนที่จะติดตั้งโมดูล npm แบบเนทีฟที่ต้องการบิลด์ให้รันด้วย:

sudo apt install -y build-essential

หมายเหตุ: นี่เป็นเส้นทางที่แนะนำสำหรับดิสทริบิวเตอร์ที่มีฐานอยู่ในทุกสถาปัตยกรรม


7

การเพิ่มคำตอบที่ถูกต้องของ @randunel (ยังไม่สามารถแสดงความคิดเห็นใน SO):

ฉันยังต้องเชื่อมโยง / usr / local / bin / node ไปยัง / usr / bin / nodejs ด้วย

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

เห็นได้ชัดว่านี่เป็นการแทนที่คำสั่ง / usr / bin / node

ไม่รู้เลยว่าชุดนั้นมาได้อย่างไร แต่หวังว่ามันจะช่วยคนอื่นได้เพราะมันเป็นความเจ็บปวดที่จะคิดออกว่าทำไมข้างต้นไม่ได้ผลสำหรับฉัน


7

ตอบรับช้า แต่สำหรับข้อมูลล่าสุด ...

หากคุณติดตั้ง node.js โดยใช้วิธีการแนะนำจากreadme การติดตั้งโหนด githubมันแนะนำให้ทำตามคำแนะนำในบทความบล็อก nodesourceแทนที่จะติดตั้งจาก repo apt-get repo ล้าสมัย node.js ควรรันโดยใช้nodeคำสั่ง เช่นเดียวกับnodejsคำสั่งโดยไม่ต้องสร้าง symlink ใหม่

วิธีการจากบทความนี้คือ:

# Note the new setup script name for Node.js v0.12
curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -

# Then install with:
sudo apt-get install -y nodejs

โปรดทราบว่านี่สำหรับ v0.12 ซึ่งจะกลายเป็นล้าสมัยในอนาคตไม่ไกล

นอกจากนี้หากคุณอยู่หลังพร็อกซีขององค์กร (เช่นฉัน) คุณจะต้องเพิ่มตัวเลือก -E ในคำสั่ง sudo เพื่อรักษา env vars ที่จำเป็นสำหรับพร็อกซี:

curl -sL https://deb.nodesource.com/setup_0.12 | sudo -E bash -



4

หากคุณอยู่ในอินสแตนซ์ AWS EC2 ที่ใช้งานอินสแตนซ์ Ubuntu (ทดสอบบน Ubuntu 16.x) ดังนั้นขั้นตอนเหล่านี้อาจใช้ได้กับคุณ:

    sudo apt-get update
    sudo apt-get --purge ลบ node -y
    sudo apt-get --purge ลบ nodejs -y
    sudo apt-get --purge ลบ legacy-node -y
    sudo rm / usr / bin / node
    curl -sL https://deb.nodesource.com/setup_6.x | sudo bash -
    sudo apt-get install nodejs -y
    node -v

หากทั้งหมดถูกต้องคำสั่งสุดท้ายจะมีผลลัพธ์เช่น: v6.xx

ถ้าไม่เช่นนั้นเรียกใช้ต่อไปนี้:

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

หวังว่านี่จะช่วยได้ มันช่วยฉันอย่างน่าอัศจรรย์ (ฮิฮิ)


3

ฉันมีลิงก์สัญลักษณ์ปัญหาเดียวกันช่วยฉันออก: sudo ln -s / usr / bin / nodejs / usr / bin / node หลังจากนั้น sudo npm install -g phantomjs-prebuilt

เป็นไปอย่างราบรื่น


2

วิธีที่ดีที่สุดในการติดตั้ง nodejs คือผ่าน NVM (Node Version Manager)

ลบเวอร์ชันก่อนหน้า:

$ sudo apt-get purge node
$ sudo apt ตอบกลับอัตโนมัติ

ลบ node_modules ทั้งหมดด้วย$ sudo rm -rf node_modulesในไดเร็กทอรีที่มีโฟลเดอร์นี้

โหนดและโหนดเป็นเทคนิคในสิ่งเดียวกัน เพียงแค่เปลี่ยนชื่อ

ก่อนติดตั้งหรือปรับปรุง nvm

เพื่อรันเป็นรูท

$ sudo su 

แล้วก็

$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.7/install.sh | ทุบตี

หรือ

$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.7/install.sh | ทุบตี

ตรวจสอบ nvm สู่พา ธ

$ source ~ / .profile
$ nvm ls-remote

หากคุณได้รับข้อผิดพลาดเกี่ยวกับรายชื่อแล้วติดตั้ง git

$ sudo apt-get git ติดตั้ง

เรียกใช้อีกครั้ง:

$ nvm ls-remote
หรือ
$ sudo nvm ls-remote

$ nvm ติดตั้งเวอร์ชั่นที่คุณต้องการ 

กำลังตรวจสอบเวอร์ชั่น

# node - รุ่น
ใช้ nvm รุ่นที่คุณต้องการ

หลักสูตรข้อมูล:

https://www.digitalocean.com/community/tutorials/how-to-install-node-js-with-nvm-node-version-manager-on-a-vps


1

ฉันสร้าง symlink แล้ว แต่ก็ยังไม่ทำงาน

ฉันลืมรีสตาร์ทเครื่อง (การเชื่อมต่อที่ฉาบ) หลังจากที่ฉันได้ทำงานโดยไม่มี symlink :)


1

จะเป็นประโยชน์สำหรับผู้เริ่มต้นอย่างแน่นอน

แม้ว่าคุณจะได้คำตอบ แต่ก็ต้องการชี้ให้เห็นว่าnodeคำสั่ง (ไม่มีพารามิเตอร์ใด ๆ ) จะเริ่มต้นโหนดในโหมดREPL read-eval-print-loopเพื่อรันโค้ดจาวาสคริปต์แบบ raw

อีกวิธีในการใช้nodeคำสั่งคือการให้jsไฟล์เป็นพารามิเตอร์ นี่คือวิธีที่เราใช้เป็นส่วนใหญ่


0

เป็นทางเลือกเพื่อลบโหนดและ nodejs ที่มีอยู่ แต่ต้องทำการติดตั้ง 7.x nodejs ล่าสุด

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

0

เพียงใช้ NVM (Node Version Manager) - https://github.com/creationix/nvm

มันได้กลายเป็นมาตรฐานสำหรับการจัดการ Node.js

เมื่อคุณต้องการรุ่นใหม่:

nvm install NEW_VER
nvm use XXX

หากมีบางอย่างผิดปกติคุณสามารถกลับไปได้เสมอ

nvm use OLD_VER


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