node-gyp เป็นเครื่องมือที่น่าสนใจซึ่งช่วยให้นักพัฒนาสามารถคอมไพล์โมดูล Node add-on แบบเนทีฟบนแพลตฟอร์มต่างๆ ได้ ปัจจุบันมีความนิยมและใช้กันอย่างแพร่หลาย จึงมักถูกรวมเป็น dependency สำหรับแพ็กเกจ NPM ส่วนใหญ่
บนระบบปฏิบัติการส่วนใหญ่ node-gyp ไม่ได้ก่อให้เกิดปัญหา การติดตั้ง node-gyp และแพ็กเกจ NPM อื่นๆ มักดำเนินการได้อย่างราบรื่นและมีประสิทธิภาพ อย่างไรก็ตาม สถานการณ์ไม่ได้เป็นเช่นนี้สำหรับทุกคน บางนักพัฒนารายงานว่ามีปัญหาในการ rebuild node-gyp บน macOS ทำให้ประสบการณ์การพัฒนาไม่ค่อยดีนัก ข้อผิดพลาดนี้ยังนำไปสู่หลายกับดักและทำให้หลายอย่างผิดพลาดได้
ปัญหานี้ไม่ใช่เรื่องใหม่ นักพัฒนาที่ใช้ macOS เวอร์ชันเก่าเคยพบข้อผิดพลาดนี้มาก่อน ด้วยการปล่อย macOS Catalina นักพัฒนาหลายคนรายงานว่าพบ node-gyp rebuild fails บน Mac หลังอัปเกรดไปสู่ macOS เวอร์ชันใหม่ ข้อผิดพลาดนี้ป้องกันไม่ให้นักพัฒนาติดตั้งแพ็กเกจ node-gyp ที่จำเป็น
หากคุณเคยพบข้อผิดพลาดนี้ คุณจะเข้าใจว่าการที่ node-gyp rebuild ล้มเหลวบน Mac น่าหงุดหงิดแค่ไหน คุณไม่สามารถดำเนินต่อไปกับการพัฒนาแอพหรือซอฟต์แวร์ได้ จนกว่าจะแก้ไขข้อผิดพลาดนี้ สบายใจได้ว่าเราทำงานหนักให้คุณแล้ว หากคุณพบว่ายากที่จะดำเนินต่อไปกับโปรเจกต์เนื่องจากข้อผิดพลาดนี้ คุณสามารถลองวิธีแก้ไขที่ระบุด้านล่างเพื่อแก้ปัญหาได้
เคล็ดลับ: สแกน Mac เพื่อตรวจสอบปัญหาประสิทธิภาพ ไฟล์ขยะ แอพมี害 และภัยคุกคามด้านความปลอดภัย
ที่อาจก่อให้เกิดปัญหาระบบหรือทำให้ประสิทธิภาพช้าลง
Node-Gyp คืออะไร?
node-gyp เป็นเครื่องมือที่ใช้คอมไพล์ Node.js Addons ซึ่งเป็นโมดูล Node.js แบบเนทีฟที่เขียนด้วย C หรือ C++ โมดูลเหล่านี้ต้องคอมไพล์บนเครื่องของคุณโดยใช้เครื่องมืออย่าง node-gyp Node-gyp ทำงานบน Windows, macOS และ Linux
Node-gyp ใช้งานง่ายโดยทั่วไปเนื่องจากอินเทอร์เฟซที่สม่ำเสมอ คุณยังสามารถใช้คำสั่งเดียวกันในการสร้างหรือ rebuild โมดูลบนแพลตฟอร์มต่างๆ ได้ Node-gyp ยังรองรับหลายเวอร์ชันเป้าหมายของ Node
หากคุณได้รับ npm gyp error บน Mojave หรือ macOS เวอร์ชันก่อนหน้า คุณต้องตรวจสอบข้อกำหนดสำหรับ node-gyp ให้ดี
นี่คือข้อกำหนดที่ต้องติดตั้งเพื่อให้ node-gyp ทำงานบน macOS:
- Python v2.7, v3.5, v3.6, หรือ v3.7
- Xcode – ยูทิลิตี้ที่ช่วยให้นักพัฒนาสร้างแอพบน macOS, iOS และ iPadOS
คุณยังต้องติดตั้ง Xcode Command Line Tools เวอร์ชันที่ถูกต้อง ซึ่งเป็นส่วนหนึ่งของชุดเครื่องมือและไลบรารีการพัฒนาซอฟต์แวร์ของ Xcode
วิธีติดตั้ง Xcode Command Line Tools:
- เปิด Xcode บน Mac
- เลือก Preferences จากเมนู Xcode
- ภายใต้แผง General คลิก Downloads
- เมื่อหน้าต่าง Downloads เปิด ให้คลิกแท็บ Components
- คลิกปุ่ม Install ถัดจาก Command Line Tools
- ล็อกอินด้วยบัญชี Apple Developer เพื่อติดตั้งเสร็จสิ้น
หากคุณใช้ macOS Catalina คุณสามารถดาวน์โหลด Command Line Tools for Xcode เวอร์ชันที่เหมาะสมสำหรับ Catalina ของคุณได้ที่นี่ สำหรับ macOS 10.15.3 ชื่อไฟล์ควรเป็น Command_Line_Tools_for_Xcode_11.3.1.dmg เมื่อคุณติดตั้งคอมโพเนนต์ที่ถูกต้องแล้ว คุณควรจะสามารถสร้างด้วย node-gyp ได้สำเร็จ หากยังได้ node-gyp rebuild failing บน Mac ให้ตรวจสอบคอมโพเนนต์เหล่านี้เพื่อหาสาเหตุ
วิธีแก้ไขข้อผิดพลาด Node-gyp Rebuild
การติดตั้ง node module เป็นกระบวนการง่าย คุณเพียงต้องรันคำสั่งเฉพาะและควรพร้อมใช้งาน หากคุณพบ node-gyp rebuild Fails บน Mac คุณต้องย้อนกลับเพื่อหาสาเหตุ
แต่ก่อน ลองขั้นตอนตรวจสอบพื้นฐานเหล่านี้ก่อน:
- รีสตาร์ทคอมพิวเตอร์เพื่อกำจัดบั๊กชั่วคราวที่อาจส่งผลต่อระบบ
- ปิดแอพที่ไม่จำเป็นทั้งหมดเพื่อปล่อยทรัพยากรคอมพิวเตอร์
- ปิดใช้งานซอฟต์แวร์ความปลอดภัยชั่วคราว เช่น โปรแกรมแอนตี้ไวรัสหรือแอนตี้มัลแวร์
- ทำความสะอาดระบบด้วย แอพซ่อมแซม Mac
หากยังได้ข้อผิดพลาด node-gyp rebuilding ให้ดูวิธีแก้ไขด้านล่างและดูว่าอันไหนใช้ได้กับคุณ
แก้ #1: ตรวจสอบคอมโพเนนต์ที่จำเป็นอีกครั้ง
สิ่งแรกที่ต้องทำเมื่อได้ npm gyp error บน Mojave หรือ macOS เวอร์ชันอื่น คือตรวจสอบข้อกำหนดการติดตั้ง node-gyp อีกครั้ง ตามที่กล่าวไว้ข้างต้น คุณต้องมี 3 คอมโพเนนต์:
- Python
- Xcode
- Xcode Command Line Tools
อย่าลืมติดตั้งภาษา C และ C++ ซึ่งจำเป็นสำหรับการคอมไพล์โมดูล หากขาดหรือทำงานไม่ได้ คุณจะได้ rebuild fail error แน่นอน การติดตั้งใหม่คอมโพเนนต์ที่ขาดหายหรือเสียหายควรช่วยแก้ปัญหาได้
แก้ #2: อัปเดตคอมโพเนนต์ Node-Gyp
บางครั้งการติดตั้งคอมโพเนนต์เหล่านี้ยังไม่เพียงพอ คุณต้องแน่ใจว่าใช้เวอร์ชันที่ถูกต้องสำหรับ macOS ของคุณ สามารถเลือก Python v2.7, v3.5, v3.6, หรือ v3.7 ได้ ขึ้นอยู่กับว่าอันไหนใช้ได้ สำหรับ Xcode สามารถดาวน์โหลดจากลิงก์นี้ คุณยังต้องติดตั้ง node-gyp เวอร์ชันล่าสุดด้วย
แก้ #3: ทดสอบ Acid Test
คุณสามารถตรวจสอบว่า Xcode Command Line Tools บนคอมพิวเตอร์ติดตั้งถูกต้องและทำงานกับ node-gyp ได้หรือไม่ โดยรัน acid test ด้วยขั้นตอน:
- บน Xcode รันคำสั่ง:
/usr/sbin/pkgutil –packages | grep CL - หากเห็น com.apple.pkg.CLTools_Executables แสดงว่าไม่มีปัญหา หากไม่มี แสดงว่าทดสอบล้มเหลว ต้องติดตั้งใหม่
- รันคำสั่งถัดไป:
/usr/sbin/pkgutil –pkg-info com.apple.pkg.CLTools_Executables - ควรเห็น version: 11.0.0 (หรือใหม่กว่า) หากไม่ใช่ แสดงว่าทดสอบล้มเหลว ต้องติดตั้งใหม่
แก้ #4: เปลี่ยนเวอร์ชัน Python
นักพัฒนาที่ได้รับผลกระทบหลายคนระบุว่าการเปลี่ยนเวอร์ชัน Python ที่ใช้สำหรับสภาพแวดล้อมที่ใช้งานอยู่ ช่วยแก้ปัญหาได้ นี่เกี่ยวข้องกับความเข้ากันระหว่าง macOS, Node และ Python ที่คุณใช้ บางคนพบว่า Python เวอร์ชันเก่า เช่น v2.7 มีความเสถียรมากกว่าเวอร์ชันใหม่ ลองทดสอบเวอร์ชันต่างๆ ดูว่าอันไหนใช้ได้
สรุป
การได้ node-gyp rebuild fails บน Mac อาจเป็นเรื่องน่าปวดหัวและการหาสาเหตุอาจเสียเวลามาก ดังนั้นหากพบข้อผิดพลาดนี้ ให้อ้างอิงคู่มือข้างต้นเพื่อทราบว่าต้องทำอะไรเพื่อแก้ไข