node-gyp - node.js Native Addon Build Tool 
node-gyp เป็นเครื่องมือบรรทัดคำสั่งข้ามแพลตฟอร์มที่เขียนใน node.js สำหรับการรวบรวมโมดูล addon ดั้งเดิมสำหรับ node.js. มันมีสำเนาของโครงการ GYP-Next ที่เคยใช้โดยทีมโครเมียมก่อนหน้านี้และขยายเพื่อสนับสนุนการพัฒนาของ Node.js Native Addons
โปรดทราบว่า node-gyp ไม่ได้ ใช้เพื่อสร้าง node.js เอง
รองรับ Node.js รุ่นเป้าหมายทั้งหมดและ LTS ทั้งหมด ขึ้นอยู่กับเวอร์ชันของ node.js ที่ติดตั้งจริงบนระบบของคุณ node-gyp ดาวน์โหลดไฟล์หรือส่วนหัวของการพัฒนาที่จำเป็นสำหรับเวอร์ชันเป้าหมาย รายการของรุ่นที่มีเสถียรภาพ node.js สามารถพบได้บนเว็บไซต์ node.js
สำคัญ
Python> = v3.12 ต้องการ node-gyp > = v10
คุณสามารถติดตั้ง node-gyp ได้โดยใช้ npm :
npm install -g node-gypขึ้นอยู่กับระบบปฏิบัติการของคุณคุณจะต้องติดตั้ง:
makeXcode Command Line Tools ซึ่งจะติดตั้ง clang , clang++ และ makeXcode Command Line Tools แบบสแตนด์อโลนโดยเรียกใช้ xcode-select --install -- หรือ --Xcode -> Open Developer Tool -> More Developer Tools...ติดตั้งเครื่องมือด้วยช็อคโกแลต:
choco install python visualstudio2022-workload-vctools -yหรือติดตั้งและกำหนดค่าเครื่องมือ Python และ Visual Studio ด้วยตนเอง:
ติดตั้ง Python เวอร์ชันปัจจุบันจาก Microsoft Store
ติดตั้งสภาพแวดล้อม Visual C ++ Build: สำหรับ Visual Studio 2019 หรือใหม่กว่าให้ใช้ Desktop development with C++ จากชุมชน Visual Studio สำหรับเวอร์ชันที่เก่ากว่า Visual Studio 2019 ให้ติดตั้งเครื่องมือสร้าง Visual Studio ด้วยตัวเลือก Visual C++ build tools
หากขั้นตอนข้างต้นไม่ได้ผลสำหรับคุณโปรดไปที่แนวทาง Node.js ของ Microsoft สำหรับ Windows สำหรับเคล็ดลับเพิ่มเติม
หากต้องการกำหนดเป้าหมาย ARM64 node.js บน Windows on ARM ให้เพิ่มส่วนประกอบ "คอมไพเลอร์และไลบรารี Visual C ++ สำหรับ ARM64" และ "Visual C ++ ATL สำหรับ ARM64"
ในการใช้คอมไพเลอร์ ARM64 C ++ ดั้งเดิมบน Windows on ARM ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Visual Studio 2022 17.4 หรือติดตั้งใหม่
ขอแนะนำให้ติดตั้งโมดูล PowerShell ต่อไปนี้: VSSetUp โดยใช้ Install-Module VSSetup -Scope CurrentUser สิ่งนี้จะทำให้ตรรกะการตรวจจับ Visual Studio เพื่อใช้วิธีการที่ยืดหยุ่นและเข้าถึงได้มากขึ้นหลีกเลี่ยงโหมด ConstrainedLanguage ของ PowerShell
node-gyp ต้องการให้คุณติดตั้ง Python เวอร์ชันที่รองรับ หากคุณติดตั้ง Python หลายรุ่นคุณสามารถระบุได้ว่าควรใช้ node-gyp เวอร์ชันใดในวิธีใดวิธีหนึ่งต่อไปนี้:
--python เช่น: node-gyp < command > --python /path/to/executable/pythonnode-gyp ถูกเรียกโดยวิธี npm และ คุณติดตั้ง Python หลายรุ่นคุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม npm_config_python เป็นเส้นทางที่เหมาะสม: export npm_config_python=/path/to/executable/pythonหรือบน windows:
py --list-paths # To see the installed Python versions
set npm_config_python=C:pathtopython.exe # CMD
$Env:npm_config_python="C:pathtopython.exe" # PowerShell หากตัวแปรสภาพแวดล้อม PYTHON ถูกตั้งค่าเป็นเส้นทางของการทำงานของ Python แล้วเวอร์ชันนั้นจะถูกใช้หากเป็นเวอร์ชันที่รองรับ
หากตัวแปรสภาพแวดล้อม NODE_GYP_FORCE_PYTHON ถูกตั้งค่าเป็นเส้นทางของการทำงานของ Python มันจะถูกใช้แทนเส้นทางการค้นหา Python ที่กำหนดค่าหรือในตัว หากไม่ใช่เวอร์ชันที่เข้ากันได้จะไม่มีการค้นหาเพิ่มเติม
เมื่อการสร้างโมดูลสำหรับ Node.js ของบุคคลที่สาม Runtimes เช่นอิเล็กตรอนซึ่งมีการกำหนดค่าการสร้างที่แตกต่างกันจากการกระจาย Node.js อย่างเป็นทางการคุณควรใช้ --dist-url หรือ --nodedir Flags เพื่อระบุส่วนหัวของรันไทม์เพื่อสร้าง .
เมื่อ-เมื่อ --dist-url หรือ --nodedir ธง nodedir จะถูกส่งผ่านโหนด-GYP จะใช้ config.gypi ที่จัดส่งในการแจกแจงส่วนหัวเพื่อสร้างการกำหนดค่าบิลด์ซึ่งแตกต่างจากโหมดเริ่มต้นที่จะใช้วัตถุ process.config ของ อินสแตนซ์ที่เรียกใช้ node.js
อิเล็กตรอนรุ่นเก่าบางรุ่นจัดส่ง malformed config.gypi ในการแจกแจงส่วนหัวของพวกเขาและคุณอาจต้องผ่าน --force-process-config ไปยัง Node-Gyp เพื่อแก้ไขข้อผิดพลาดการกำหนดค่า
เพื่อรวบรวม addon ดั้งเดิมของคุณก่อนไปที่ไดเรกทอรีรากของมัน:
cd my_node_addon ขั้นตอนต่อไปคือการสร้างไฟล์สร้างโครงการที่เหมาะสมสำหรับแพลตฟอร์มปัจจุบัน ใช้ configure สำหรับสิ่งนั้น:
node-gyp configure การตรวจจับอัตโนมัติล้มเหลวสำหรับ Visual C ++ Build Tools 2015 ดังนั้น --msvs_version=2015 จำเป็นต้องเพิ่ม (ไม่จำเป็นเมื่อเรียกใช้โดย NPM ตามที่กำหนดไว้ข้างต้น):
node-gyp configure --msvs_version=2015 หมายเหตุ : ขั้นตอน configure ค้นหาไฟล์ binding.gyp ในไดเรกทอรีปัจจุบันเพื่อประมวลผล ดูคำแนะนำด้านล่างสำหรับการสร้างไฟล์ binding.gyp
ตอนนี้คุณจะมี Makefile (บนแพลตฟอร์ม UNIX) หรือไฟล์ vcxproj (บน Windows) ใน build/ Directory ถัดไปเรียกใช้คำสั่ง build :
node-gyp build ตอนนี้คุณมีไฟล์การเชื่อมโยง .node ที่รวบรวมไว้แล้ว! การเชื่อมโยงที่รวบรวมจะจบลงใน build/Debug/ หรือ build/Release/ ขึ้นอยู่กับโหมดการสร้าง ณ จุดนี้คุณสามารถต้องการไฟล์ .node ด้วย node.js และเรียกใช้การทดสอบของคุณ!
หมายเหตุ: หากต้องการสร้างบิลด์ ดีบั๊ก ของไฟล์การเชื่อมโยงให้ส่งสวิตช์ --debug (หรือ -d ) เมื่อเรียกใช้คำสั่ง configure , build หรือ rebuild
binding.gyp ไฟล์ binding.gyp อธิบายการกำหนดค่าเพื่อสร้างโมดูลของคุณในรูปแบบเหมือน JSON ไฟล์นี้ถูกวางไว้ในรูทของแพ็คเกจของคุณพร้อมกับ package.json
ไฟล์ gyp ที่เหมาะสมสำหรับการสร้าง node.js addon อาจมีลักษณะ:
{
"targets" : [
{
"target_name" : "binding" ,
"sources" : [ "src/binding.cc" ]
}
]
}ไดเรกทอรี DOCS มีเอกสารเพิ่มเติมเกี่ยวกับหัวข้อโหนด gyp ที่เฉพาะเจาะจงซึ่งอาจเป็นประโยชน์หากคุณประสบปัญหาในการติดตั้งหรือสร้างส่วนเสริมโดยใช้ Node-Gyp
แหล่งข้อมูลเพิ่มเติมบางอย่างสำหรับ addons เนทีฟ Node.js และการเขียนไฟล์การกำหนดค่า gyp :
node-gyp ตอบสนองต่อคำสั่งต่อไปนี้:
| สั่งการ | คำอธิบาย |
|---|---|
help | แสดงกล่องโต้ตอบความช่วยเหลือ |
build | เรียก make / msbuild.exe และสร้าง addon ดั้งเดิม |
clean | ลบไดเรกทอรี build หากมีอยู่ |
configure | สร้างไฟล์การสร้างโครงการสำหรับแพลตฟอร์มปัจจุบัน |
rebuild | รันทำความ clean configure และ build ทั้งหมดในแถว |
install | ติดตั้งไฟล์ส่วนหัว node.js สำหรับเวอร์ชันที่กำหนด |
list | แสดงรายการส่วนหัวของ Node.js ที่ติดตั้งอยู่ในปัจจุบัน |
remove | ลบไฟล์ส่วนหัว node.js สำหรับเวอร์ชันที่กำหนด |
node-gyp ยอมรับตัวเลือกคำสั่งต่อไปนี้:
| สั่งการ | คำอธิบาย |
|---|---|
-jn , --jobs n | เรียก make ในแบบคู่ขนาน ค่า max จะใช้แกน CPU ที่มีอยู่ทั้งหมด |
--target=v6.2.1 | node.js เวอร์ชันเพื่อสร้าง (ค่าเริ่มต้นคือ process.version ) |
--silly , --loglevel=silly | บันทึกความคืบหน้าทั้งหมดไปยังคอนโซล |
--verbose , --loglevel=verbose | บันทึกความคืบหน้าส่วนใหญ่ไปยังคอนโซล |
--silent --loglevel=silent | อย่าบันทึกอะไรไว้ในคอนโซล |
debug , --debug | สร้าง Debug Build (ค่าเริ่มต้นคือ Release ) |
--release --no-debug | สร้างการเปิดตัว |
-C $dir , --directory=$dir | เรียกใช้คำสั่งในไดเรกทอรีที่แตกต่างกัน |
--make=$make | Override make Command (เช่น gmake ) |
--thin=yes | เปิดใช้งานไลบรารีแบบคงที่บาง ๆ |
--arch=$arch | ตั้งค่าสถาปัตยกรรมเป้าหมาย (เช่น IA32) |
--tarball=$path | รับส่วนหัวจาก tarball ท้องถิ่น |
--devdir=$path | ไดเรกทอรีดาวน์โหลด SDK (ค่าเริ่มต้นคือ OS Cache Directory) |
--ensure | อย่าติดตั้งส่วนหัวใหม่หากมีอยู่แล้ว |
--dist-url=$url | ดาวน์โหลดส่วนหัว tarball จาก URL ที่กำหนดเอง |
--proxy=$url | ตั้งค่า http (s) พร็อกซีสำหรับการดาวน์โหลดส่วนหัว tarball |
--noproxy=$urls | ตั้งค่า URL เพื่อละเว้นพร็อกซีเมื่อดาวน์โหลดส่วนหัว tarball |
--cafile=$cafile | Override เริ่มต้น CA Chain (เพื่อดาวน์โหลด tarball) |
--nodedir=$path | ตั้งค่าพา ธ ไปยังซอร์สโค้ดโหนด |
--python=$path | ตั้งเส้นทางไปยัง Binary Python |
--msvs_version=$version | ตั้งค่าเวอร์ชัน Visual Studio (Windows เท่านั้น) |
--solution=$solution | ตั้งค่าเวอร์ชันโซลูชัน Visual Studio (Windows เท่านั้น) |
--force-process-config | บังคับใช้วัตถุ process.config ของ runtime เพื่อสร้างไฟล์ config.gypi |
ใช้แบบฟอร์ม npm_config_OPTION_NAME สำหรับตัวเลือกคำสั่งใด ๆ ที่ระบุไว้ด้านบน (ขีดกลางในชื่อตัวเลือกควรถูกแทนที่ด้วยขีดล่าง)
ตัวอย่างเช่นในการตั้งค่า devdir เท่ากับ /tmp/.gyp คุณจะ:
เรียกใช้สิ่งนี้บน Unix:
export npm_config_devdir=/tmp/.gypหรือสิ่งนี้บน Windows:
set npm_config_devdir=c:temp.gypnpm สำหรับเวอร์ชัน NPM ก่อน V9 ใช้แบบฟอร์ม OPTION_NAME สำหรับตัวเลือกคำสั่งใด ๆ ที่ระบุไว้ด้านบน
ตัวอย่างเช่นในการตั้งค่า devdir เท่ากับ /tmp/.gyp คุณจะเรียกใช้:
npm config set [--global] devdir /tmp/.gyp หมายเหตุ: ชุดการกำหนดค่าผ่าน npm จะใช้เฉพาะเมื่อ node-gyp ทำงานผ่าน npm ไม่ใช่เมื่อ node-gyp ทำงานโดยตรง
node-gyp มีอยู่ภายใต้ใบอนุญาต MIT ดูไฟล์ใบอนุญาตสำหรับรายละเอียด