การแก้ไขปัญหา Node.js
เอกสารนี้จัดทำขึ้นเพื่อช่วยให้นักพัฒนาที่ใช้งานสภาพแวดล้อมการพัฒนาแบบโลคอลของ ServBay สามารถแก้ไขปัญหาทั่วไปที่อาจพบขณะใช้งานแพ็กเกจ Node.js
ไม่พบเวอร์ชันของคำสั่ง Node.js/npm/pnpm/yarn หรือไม่พบคำสั่ง
เมื่อคุณใช้ Node.js, npm, pnpm หรือ yarn ใน ServBay หากพบข้อความผิดพลาดลักษณะดังตัวอย่างข้างล่างนี้ หมายถึงระบบไม่สามารถค้นหาไฟล์ปฏิบัติการของ Node.js เวอร์ชันที่คุณต้องการใช้งานได้:
bash
Warning: Specified Node.js version '22' for 'node' not found.
If this is not your intention, please delete the 'NODE_VERSION' configuration
from the '.servbay.config' file in the current directory.1
2
3
2
3
โดยทั่วไปปัญหานี้เกิดจาก Node.js เวอร์ชันที่คุณต้องการใช้งานยังไม่ได้ติดตั้งไว้ใน ServBay หรือคุณต้องการใช้ Node.js เวอร์ชันที่ติดตั้งผ่านเครื่องมือภายนอก เช่น nvm หรือ homebrew แต่เนื่องจากการตั้งค่าสภาพแวดล้อมไม่ถูกต้องจึงทำให้ ServBay ไม่สามารถค้นหาตำแหน่งเวอร์ชันดังกล่าวได้
คำแนะนำ
หลังติดตั้ง ServBay แล้ว ระบบจะตั้งค่าอัตลักษณ์สคริปต์ (Script Alias) ให้แพ็กเกจ Node.js ของ ServBay มีลำดับความสำคัญสูงสุดเสมอ หากไม่พบเวอร์ชันที่ระบุใน ServBay ระบบจะพยายามค้นหาเวอร์ชันดีฟอลต์ที่ติดตั้งด้วย nvm ตามด้วยเวอร์ชันจาก homebrew หากยังหาไม่พบจะปรากฏข้อผิดพลาดข้างต้น
การวิเคราะห์สาเหตุ:
- Node.js เวอร์ชันที่ต้องการใช้งานยังไม่ได้ติดตั้งไว้ภายในแอป ServBay
- มีการติดตั้ง
nvmหรือhomebrewที่ระบบ และคุณคาดหวังจะใช้ Node.js เวอร์ชันที่เครื่องมือเหล่านี้บริหารจัดการ แต่เพราะตั้งค่า environment (โดยเฉพาะPATHหรือNVM_BIN) ไม่ถูกต้อง ServBay จึงไม่สามารถค้นหา Node.js ที่ติดตั้งด้วยวิธีดังกล่าวได้
แนวทางแก้ไข:
หากคุณติดตั้ง nvm และได้ติดตั้ง Node.js ด้วย nvm แล้วแต่ยังเจอปัญหานี้ ส่วนใหญ่มักเกิดจากการตั้งค่า environment variable NVM_BIN ไม่ถูกต้องหรือขาดหายไปจาก shell configuration ของคุณ โดยปกติหากติดตั้ง nvm อย่างถูกต้อง ตัวแปรนี้จะชี้ไปยังไฟล์ปฏิบัติการ Node.js ที่ติดตั้งโดย nvm และเป็นหัวใจสำคัญให้ nvm สามารถทำงานได้สมบูรณ์
คุณควรตรวจสอบและแก้ไขไฟล์ตั้งค่า shell ของคุณ (เช่น ~/.zshrc, ~/.bash_profile ฯลฯ) เพื่อให้มั่นใจว่ามีการตั้งค่าและ export ตัวแปร NVM_BIN ที่ถูกต้อง แล้ว reload การตั้งค่าด้วยคำสั่ง source ~/.zshrc หรือเปิดหน้าต่าง terminal ใหม่ เมื่อแก้ไขแล้วกลไกค้นหาของ ServBay จะสามารถใช้งาน Node.js เวอร์ชันที่จัดการโดย nvm ได้อย่างถูกต้อง

หากคุณไม่ได้ใช้งาน nvm หรือ homebrew และต้องการใช้ Node.js ที่จัดการด้วย ServBay กรุณาตรวจสอบให้แน่ใจว่า Node.js เวอร์ชันที่ต้องการใช้งานได้ติดตั้งผ่านหน้าจอ “แพ็กเกจ” ของแอป ServBay เรียบร้อยแล้ว
พบข้อผิดพลาดไม่รองรับสถาปัตยกรรมขณะติดตั้ง npm package เช่น node-sass
สำหรับผู้ใช้ macOS ที่ใช้หน่วยประมวลผล Apple Silicon (M1/M2/M3/M4 – Arm64) เมื่อพยายามติดตั้งหรือใช้งาน npm package เก่าหรือที่มีการพึ่งพา native module (เช่น node-sass) อาจพบข้อผิดพลาด เช่น Unsupported architecture (arm64) ซึ่งเกิดจาก package ดังกล่าวรองรับเพียงเฉพาะสถาปัตยกรรม x86_64 เท่านั้น
bash
ERROR: Module Error (from ./node_modules/sass-loader/dist/cjs.js):
Node Sass does not yet support your current environment: OS X Unsupported architecture (arm64) with Node.js 14.x
For more information on which environments are supported
please see:
https://github.com/sass/node-sass/releases/tag/v4.14.11
2
3
4
5
2
3
4
5
การวิเคราะห์สาเหตุ:
บาง npm package มีการฝังโค้ด C++ หรือ native อื่น ๆ ซึ่งต้องคอมไพล์ให้ตรงกับสถาปัตยกรรมของ CPU ที่ใช้งาน หาก package เหล่านี้เป็นเวอร์ชันเก่าจะไม่มีไบนารีหรือซัพพอร์ตสำหรับ Arm64 (Apple Silicon)
แนวทางแก้ไข:
เปลี่ยนไปใช้ package สมัยใหม่ที่รองรับ Arm64 โดยตรง (แนะนำที่สุด)
วิธีที่แนะนำอย่างยิ่งคืออัปเกรดไปใช้ package ที่ได้รับการดูแลและรองรับ Arm64 เช่น เปลี่ยนจาก
node-sass(เลิกดูแลแล้ว) ไปใช้sassซึ่งทันสมัยและเป็นมาตรฐานในปัจจุบัน ระบบ frontend ส่วนใหญ่ก็รองรับsassแล้วbashnpm uninstall node-sass npm install --save-dev sass1
2ติดตั้ง Node.js สถาปัตยกรรม x86_64 ใน ServBay แล้วใช้งานผ่าน Rosetta 2 (ไม่แนะนำ)
ServBay ให้ตัวเลือกติดตั้ง Node.js สถาปัตยกรรม
x86_64เพิ่มเติม ซึ่งจะช่วยให้คุณสามารถรัน Node.js และ native module สถาปัตยกรรมx86_64ได้บน Mac Apple Silicon ผ่าน Rosetta 2 (ระบบแปลภาษาของ macOS) คุณสามารถติดตั้งผ่านหน้า “แพ็กเกจ” ของแอป ServBay
โปรดทราบ: วิธีนี้ไม่แนะนำให้ใช้เป็นระยะยาว ด้วยเหตุผลเรื่องประสิทธิภาพ (อาจช้ากว่า) และความเข้ากันได้ที่อาจไม่เท่าเทียมกับการรันในสถาปัตยกรรม Arm64 แบบ native กรุณาเลือกใช้แนวทางที่ 1 ก่อนเป็นอันดับแรก
