Skip to main content

วิธีติดตั้ง Node.js บนเครื่องที่ใช้ CPU Apple Silicon M1

· 3 min read
Kongvut Sangkla

Intro

สวัสดีปีใหม่ครับ นี่เป็นบทความแรกของปี 2022 จากการห่างหายการเขียน Blog ไปนานเลย เพราะผมเองก็เพิ่งจะทำให้ตัวเองว่างได้ และมีเวลามาเขียนจริงจังครับ 😄

เนื่องจากผมเพิ่งได้รับ Macbook Pro เครื่องใหม่ที่ใช้ CPU ที่เปลี่ยนสถาปัตยกรรมใหม่เป็น ARM หรือ ที่เรียกคุ้น ๆ กันคือ Apple Silicon M1 🎉

ผมมีความตื่นเต้นมากที่จะได้ทดสอบเครื่องใหม่หลาย ๆ อย่างเกี่ยวกับ CPU Apple M1 นี้ และจะพยายามเอามาเขียนลงไว้ใน Blog นี้ให้ได้อ่านกันครับ 😊

โดยเนื้อหานี้หวังว่าจะช่วยให้ Dev ที่เขียนภาษา JavaScript ให้มีความเข้าใจ และการตั้งค่าเครื่องที่ควรรู้ครับ

img

Apple MacBook Pro (14-inch, 2021) on Chip Apple M1 Pro

ที่มาของเรื่องยุ่ง ๆ การเปลี่ยนผ่านจากเครื่องเก่าไป M1

Apple Macbook Pro เครื่องใหม่ที่ใช้ Chip M1 Pro มีความน่าตื่นเต้นที่เปลี่ยนสถาปัตยกรรมไปใช้แบบ ARM จากเครื่องเดิมของผมที่เป็น Macbook Pro ที่ใช้สถาปัตยกรรมที่เป็นของ Intel x86 ทำให้ต้องหา Apps ที่ใช้กับ M1 ได้เพื่อประสิทธิภาพที่ดีที่สุด

จนกระทั่งผมเองมีเวลาได้ทดสอบเครื่องและหาข้อมูลหลายอย่าง ตอนนี้การเปลี่ยนผ่านจากเครื่องเก่าไป M1 ก็ค่อนข้างลงตัวแล้ว โดยพวกเครื่องมือที่เป็น Developer tools หลาย ๆ ตัวก็ได้รับการปรับปรุงเพื่อให้การทำงานกับ M1 เพื่อให้มีความ Natively กับ M1 (รวมถึง Docker ด้วย เดี๋ยวเอาไว้เขียนแยกอีกบทความ) เลยขอเอามาบันทึกเขียนบทความไว้สักหน่อย 🚀

การติดตั้ง Node.js บน M1

การติดตั้ง Node.js บน M1 นั้นทำได้หลายวิธี แต่!

ผมแนะนำให้ใช้ Node Version Manager (nvm) เพราะว่า nvm นั้นสามารถสลับ Node.js versions ได้ง่ายกว่า และไม่จำเป็นต้องติดตั้ง Node.js ก่อนใช้ nvm (หมายถึงว่าติดตั้งแค่ nvm ก็พอ)

info

พวก Macbook ตัวเดิมที่ใช้ Chip Intel ก็สามารถติดตั้ง Node.js ด้วยวิธีแบบ nvm ได้เหมือนกัน

caution

ถ้าหากคุณมี Node.js ในเครื่องอยู่แล้วควร Uninstall ออกก่อนนะครับ

เปิด Terminal จากนั้น Run คำสั่งนี้

ติดตั้ง nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

คำสั่งด้านบนจะติดตั้งรุ่นล่าสุดในตอนนี้คือ v0.39.1 หากต้องการให้เป็นรุ่นใหม่สามารถอ้างอิงได้ตามลิงก์นี้ https://github.com/nvm-sh/nvm/releases

ติดตั้ง Node.js รุ่น latest version

ติดตั้ง Node.js ด้วย nvm
nvm install node

รีสตาร์ท Terminal จากนั้น Run คำสั่งนี้

nvm use node

ตรวจสอบ Version ที่ติดตั้งดูหน่อยสิ

node -v && npm -v

> v17.4.0
> 8.3.1

โอเค เมื่อถึงขั้นตอนนี้แล้ว ก็แสดงว่าติดตั้ง Node.js สำเร็จไม่มีปัญหาใด ๆ และโดยทั่วไป nvm จะติดตั้ง Node.js รุ่นล่าสุดให้เรา แต่ถ้าหากคุณต้องการติดตั้งรุ่นอื่น ๆ คุณจำเป็นต้องระบุรุ่นเอง เช่น

nvm install 14.7.0 # or 16.3.0, 12.22.1, etc

ส่วนรายละเอียดและการใช้ nvm อื่น ๆ สามารถอ่านได้จากลิงก์นี้ https://github.com/nvm-sh/nvm#usage

วิธีสลับ Architecture

โดยปกติถ้าเป็นเครื่องที่เป็น M1 และถ้ารันคำสั่งตรวจสอบสถาปัตยกรรมที่ใช้กับ Node.js จะได้ arm64

node -p process.arch

> arm64

ตรงนี้จะอ้างอิงกับ Architecture environment ขณะที่เราเปิด Terminal

ทีนี้บางครั้ง ถ้าคุณจำเป็นต้องใช้สถาปัตยกรรมที่เป็น x86 (เพราะว่าบางครั้งพวก Libraries หรือพวก npm packages ที่ต้องรันแบบ Binary ไม่สามารถทำงานกับ M1 native ได้) สามารถทำได้ดังนี้

สลับไป x86 architecture environment

arch -x86_64 zsh

ตรวจสอบ Architecture ดูซิว่าถูกต้องหรือเปล่า

node -p process.arch

> x64

และหากต้องการกลับไป Environment ที่ใช้สถาปัตยกรรมที่เป็น arm64 บน zsh สามารถทำได้ดังนี้

exit

เมื่อกลับ Native shell แล้วก็ตรวจสอบ Architecture ดูซิว่าถูกต้องหรือเปล่า

arch

> arm64

หากต้องการใช้ Rosetta บน Terminal เสมอ

หากคุณต้องการใช้ x86 เสมอ (โดยไม่ต้องเสียเวลามาสลับ Architecture ไปมาทุกครั้ง) สามารถทำได้ดังนี้

  1. Click ขวาที่ (Terminal, iTerm, etc.) ใน โน Folder Applications
  2. เลือก "Get Info"
  3. ใน General Section เลือก "Open using Rosetta"
  4. Restart terminal

Imgur

แต่สำหรับผมขอใช้วิธีแบบเดิมดีกว่า (วิธีสลับ Architecture ไปมา) เพราะไม่ค่อยอยากใช้ Rosetta เพราะชอบให้ Terminal รันบน Native มากกว่า 😄

สรุป

จบไปแล้วสำหรับการติดตั้ง Node.js บน M1 และการทำความเข้าใจสถาปัตยกรรม ARM และ x86_64

ส่วนตัวจากการใช้งาน Node.js บน M1 ที่เป็น ARM แล้วพบว่าทำงานได้เร็วมาก ๆ โดยเฉพาะตอน Build (เครื่องเดิมที่เป็น Intel i9 ที่ทำงานบน WSL2 ยังไม่เร็วขนาดนี้เลย) เป็นอะไรที่น่าพอใจมาก ๆ ครับ ได้ลองใช้แล้วสมกับที่คนอวย M1 นักหนา 😄 👍

แล้วตอนนี้ก็เริ่มมีหลาย Applications ที่รองรับการทำงานรวมกับ M1 Native บน Apple Silicon แต่คุณก็สามารถติดตั้งพวก Applications ที่เป็น x86_64 versions และนั่นก็หมายความว่าจะเป็นการใช้ Rosetta ที่เป็นตัวจำลองให้ App x86_64 ทำงานได้บน ARM

โดยการทำงานของ Rosetta จะทำงานเป็นเบื้องหลังเพื่อกระบวนการแปลง Application ให้ทำงานร่วมกับ M1 ได้ แต่ต้องเข้าใจด้วยว่าในกระบวนการทำงานด้วย Rosetta ก็จะสูญเสียประสิทธิภาพเครื่องที่เป็น ARM แบบ Native ด้วยเช่นกัน

แถมนิดนึงคุณสามารถดู https://doesitarm.com และ https://isapplesiliconready.com สำหรับค้นหา Apps และ Libs ที่รอบรับกับ M1 เพื่อประสิทธิภาพการทำงานสูงสุดของเครื่องคุณ

References

Loading...