18 คะแนน โดย xguru 2024-05-13 | 4 ความคิดเห็น | แชร์ทาง WhatsApp
  • หัวข้อเปรียบเทียบหลัก: การรองรับข้ามแพลตฟอร์ม, การตั้งค่าเริ่มต้น, แหล่งที่มาของเวอร์ชัน Node, การใช้งานในชีวิตประจำวัน

Node Version Manager (NVM)

  • มีดาวบน GitHub 75.2k เป็นโซลูชันยอดนิยมที่สุดสำหรับการจัดการเวอร์ชัน Node
  • เปิดตัวมาตั้งแต่ช่วงแรกและได้รับความนิยมอย่างมากในชุมชน
  • ยังไม่รองรับ Windows แบบสมบูรณ์ และทำงานผ่าน GitBash, Cygwin, WSL เป็นต้น
  • มีแพ็กเกจแยกสำหรับ Windows ชื่อ nvm-windows แต่ไม่ใช่ NVM เอง
  • รองรับเฉพาะ POSIX shell (bash, zsh) เท่านั้น ผู้ใช้ Fish และเชลล์อื่นจึงไม่ถูกรองรับ
  • ติดตั้งได้ด้วยคำสั่งง่าย ๆ
  • สามารถอ่านเวอร์ชัน Node.js ที่จะใช้งานได้จากไฟล์ .nvmrc
  • คำสั่ง nvm use จะตั้งค่าเวอร์ชัน Node.js เฉพาะในเชลล์ปัจจุบันเท่านั้น ดังนั้นแม้ออกจากโฟลเดอร์โปรเจ็กต์แล้ว เวอร์ชันก็ยังคงเดิม
  • จึงมีภาระที่ต้องคอยรับรู้ตลอดว่า Node.js เวอร์ชันในเชลล์ปัจจุบันคืออะไร และโปรเจ็กต์ต้องการเวอร์ชันใด
  • ดีกว่าการจัดการทุกเวอร์ชันของ Node.js ด้วยตัวเอง แต่ก็ยังห่างไกลจากคำว่าผสานรวมอย่างสมบูรณ์

N

  • เป็นตัวจัดการเวอร์ชัน Node.js ยอดนิยม โดยมีดาวบน GitHub 18.5k
  • ไม่ใช่เครื่องมือข้ามแพลตฟอร์ม และมีข้อจำกัดมากกว่า NVM
  • ไม่ทำงานบน Windows native shell, Git for Windows Bash และ Cygwin DLL
  • สามารถติดตั้งได้โดยตรงผ่าน NPM หรือ Brew หรือดาวน์โหลดสคริปต์ sh มาติดตั้ง
  • สามารถตรวจจับเวอร์ชัน Node ได้โดยตรงจากส่วน "engines" ใน package.json
  • หากต้องการใช้ Node.js เวอร์ชันที่ถูกต้องกับโปรเจ็กต์อื่น ก็ยังมีปัญหาที่ต้องคอยติดตามเอง
  • เพราะมันจัดการเวอร์ชัน Node.js แบบ "global" ทำให้แม้ปิดเชลล์ไปแล้ว เวอร์ชัน Node ที่ใช้กับโปรเจ็กต์ล่าสุดก็ยังคงอยู่

Fast Node Manager (FNM)

  • เป็นตัวจัดการเวอร์ชัน Node ที่เขียนด้วย Rust และมีดาวบน GitHub 15.2k
  • เป็นตัวจัดการเวอร์ชัน Node ข้ามแพลตฟอร์มตัวแรกในรายการนี้
  • รันบน Windows ได้โดยไม่ต้องติดตั้งแพ็กเกจอื่นเพิ่ม
  • กระบวนการติดตั้งชัดเจนและเข้าใจง่าย
  • จัดการเวอร์ชัน Node.js แยกตามแต่ละเชลล์ และถ้าโปรเจ็กต์ไม่ได้ระบุเวอร์ชันไว้ ก็จะใช้เวอร์ชัน "ค่าเริ่มต้น"
  • มีฟีเจอร์สลับเวอร์ชัน Node.js อัตโนมัติตามโฟลเดอร์ แต่ต้องตั้งค่าก่อน
  • เพื่อให้การสลับอัตโนมัติทำงานได้อย่างถูกต้อง ต้องติดตั้งเวอร์ชัน Node.js ที่ต้องใช้ไว้ล่วงหน้า
  • ตรวจจับเวอร์ชัน Node ได้จากไฟล์ .node-version หรือ .nvmrc เท่านั้น

Volta

  • มีดาวบน GitHub 10k และเป็นดาวรุ่งในโลกของตัวจัดการเวอร์ชัน
  • เขียนด้วย Rust และรองรับข้ามแพลตฟอร์ม
  • กระบวนการติดตั้งบนระบบตระกูล Unix ลื่นไหล
  • ไม่ต้องมีไฟล์เพิ่มเติมเมื่อตั้งค่าเวอร์ชัน Node.js
  • ดึงการตั้งค่าได้โดยตรงจาก package.json
  • ส่วน "engines" อยู่ถัดจากการตั้งค่า Volta ทำให้ซิงก์เวอร์ชันได้ง่าย
  • สามารถจัดการ toolchain ได้ จึงสลับได้แบบไดนามิกไม่เพียงแค่เวอร์ชัน Node.js แต่รวมถึงเวอร์ชัน Yarn ด้วย
  • ทุกครั้งที่รันคำสั่งติดตั้ง จะรับประกันว่าเวอร์ชัน Node.js และ Yarn ตรงกับที่ประกาศไว้

PNPM

  • แม้มักถูกมองว่าเป็นทางเลือกแทน NPM หรือ Yarn แต่ก็สามารถจัดการเวอร์ชัน Node.js ได้เช่นกัน
  • รองรับข้ามแพลตฟอร์ม และมอบประสบการณ์จัดการเวอร์ชัน Node.js ที่เหมือนกันบนทุกแพลตฟอร์ม
  • เนื่องจากการจัดการเวอร์ชัน Node ไม่ใช่ฟีเจอร์หลัก จึงใช้งานร่วมกับ NPM หรือ Yarn ได้ยาก
  • Node.js ที่ติดตั้งด้วย PNPM จะไม่มี Corepack รวมมาให้
  • จัดการเวอร์ชัน Node.js ได้แบบ global เท่านั้น ไม่สามารถตั้งค่าแยกตามเชลล์ได้
  • ไม่สลับเวอร์ชัน Node.js แบบไดนามิกเมื่อย้ายระหว่างโปรเจ็กต์ จึงต้องคอยติดตามเอง

บทสรุป

  • ตัวจัดการเวอร์ชัน Node.js ได้พัฒนามาอย่างมากต่อเนื่อง
  • NVM เป็นโซลูชันที่เก่าแก่ที่สุดและได้รับความนิยมสูงสุด และยังคงเป็นเช่นนั้น
  • แต่ ecosystem กำลังพัฒนา และมีเครื่องมือหลากหลายอย่าง N, FNM, Volta ปรากฏขึ้นมา
  • ณ ตอนนี้ Volta ดูจะเป็นตัวจัดการเวอร์ชัน Node.js ที่ครบเครื่องและสมบูรณ์ที่สุด
  • Volta รองรับข้ามแพลตฟอร์ม มอบประสบการณ์ใช้งานที่ลื่นไหลในชีวิตประจำวัน และยังช่วยจัดการเครื่องมืออื่นที่ใช้ในโปรเจ็กต์ได้ด้วย

4 ความคิดเห็น

 
firea32 2024-05-20

เพราะการต้องมาเรียนรู้เพื่อจัดการแยกเป็นแพ็กเกจมันยุ่งยาก เลยใช้แค่ brew unlink && brew link node@14 แบบนี้อยู่ครับ

 
halfenif 2024-05-14

มีทุกอย่างเยอะเกินไปจนความตั้งใจที่จะเรียนรู้อย่างจริงจังกลับ "เลือนราง"

พอนึกถึงเมื่อก่อนที่เคยคุ้ยหาไฟล์รันบนวินโดวส์ใน FileForge ก็รู้สึกว่า ถึงจะสะดวกแล้ว แต่มันจะสะดวกได้ขนาดนี้เลยหรือเนี่ย.

 
surfindia 2024-05-13

สำหรับผม สิ่งที่คาดหวังจากตัวจัดการเวอร์ชันไม่ใช่ประสิทธิภาพ แต่เป็นความอเนกประสงค์มากกว่า และในแง่นั้นก็ใช้งาน https://github.com/asdf-vm/asdf ได้อย่างตอบโจทย์เพียงพอครับ ขึ้นอยู่กับปลั๊กอินแล้ว มันจัดการได้ไม่ใช่แค่ node แต่รวมถึง python, ruby, golang และอื่น ๆ ได้ทั้งหมดด้วย ตอนนี้ก็ใช้งาน direnv plugin อยู่ได้ดีเหมือนกันครับ

 
kroisse 2024-05-13

Nodenv ก็เป็นทางเลือกที่ค่อนข้างดีเหมือนกัน แต่เสียดายที่ไม่มีการกล่าวถึง คงถูกตัดออกเพราะมี GitHub star 2.2k เลยอาจถูกมองว่าไม่ได้เป็นที่รู้จักมากนัก

เนื่องจากทำงานบนพื้นฐานของเชลล์สคริปต์ ความเข้ากันได้กับ Windows จึงค่อนข้างอ่อนเหมือนกับ NVM หรือ N แต่ข้อดีก็คือสามารถกำหนดเวอร์ชัน Node.js แบบอิงตามโฟลเดอร์แยกจากเวอร์ชัน Node.js แบบ global ได้ และยังสามารถเปิดเชลล์สภาพแวดล้อมใหม่ที่ใช้ Node.js เวอร์ชันที่กำหนดไว้ได้ด้วย