node-gyp - Node.js أداة إنشاء Addon الأصلية 
node-gyp هي أداة سطر الأوامر عبر المنصات المكتوبة في Node.js لتجميع وحدات Addon الأصلية لـ Node.js. أنه يحتوي على نسخة مزودة بمشروع GYP-Next الذي تم استخدامه مسبقًا من قبل فريق Chromium وتمتد لدعم تطوير الإضافات الأصلية Node.js.
لاحظ أن node-gyp لا يستخدم لإنشاء node.js نفسها.
يتم دعم جميع الإصدارات المستهدفة الحالية و LTS من Node.js. اعتمادًا على إصدار Node.js الذي يتم تثبيته فعليًا على تنزيل Gy System 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++ و make .Xcode 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.
تثبيت Visual C ++ Build Environment: for Visual Studio 2019 أو لاحقًا ، استخدم Desktop development with C++ من مجتمع Visual Studio. للحصول على إصدار أقدم من Visual Studio 2019 ، قم بتثبيت أدوات إنشاء Visual Studio مع خيار Visual C++ build tools .
إذا لم تنجح الخطوات المذكورة أعلاه من أجلك ، فيرجى زيارة إرشادات Microsoft Node.js لنظام التشغيل Windows للحصول على نصائح إضافية.
لاستهداف ARM64 الأصلي node.js على Windows على الذراع ، أضف المكونات "مجمعات ومكتبات Visual C ++ لـ ARM64" و "Visual C ++ ATL لـ ARM64".
لاستخدام مترجم ARM64 C ++ على Windows على ARM ، تأكد من أن لديك Visual Studio 2022 17.4 أو لاحقًا.
يُنصح بتثبيت وحدة PowerShell التالية: VSSETUP باستخدام Install-Module VSSetup -Scope CurrentUser . سيؤدي ذلك إلى جعل منطق Visual Studio للكشف عن طريقة أكثر مرونة ويمكن الوصول إليها ، وتجنب وضع PowerShell ConstrainedLanguage .
يتطلب 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 من الطرف الثالث مثل الإلكترون ، والتي لديها تكوينات بناء مختلفة من توزيع Node.js الرسمي ، يجب عليك استخدام --dist-url أو- --nodedir لتحديد رؤوس وقت التشغيل للبناء من أجل .
أيضًا عندما يتم تمرير علامات- --dist-url أو- --nodedir ، ستستخدم Node-GYP config.gypi تم شحنها في توزيع الرؤوس لإنشاء تكوينات الإنشاء ، والتي تختلف عن الوضع الافتراضي الذي سيستخدم process.config من تشغيل Node.js مثيل.
تم شحن بعض الإصدارات القديمة من الإلكترون config.gypi في توزيعات رؤوسها ، وقد تحتاج إلى --force-process-config إلى Node-GYP للعمل حول أخطاء التكوين.
لتجميع الملحق الأصلي ، انتقل أولاً إلى دليل الجذر الخاص به:
cd my_node_addon والخطوة التالية هي إنشاء ملفات إنشاء المشروع المناسبة للمنصة الحالية. استخدم configure لذلك:
node-gyp configure يفشل الكشف التلقائي في أدوات البناء المرئية C ++ 2015 ، لذلك- --msvs_version=2015 يجب إضافة (غير مطلوب عند تشغيله بواسطة NPM كما تم تكوينه أعلاه):
node-gyp configure --msvs_version=2015 ملاحظة : تبحث خطوة configure عن ملف binding.gyp في الدليل الحالي للمعالجة. انظر أدناه للحصول على تعليمات حول إنشاء ملف binding.gyp .
الآن سيكون لديك إما Makefile (على منصات UNIX) أو ملف vcxproj (على Windows) في build/ الدليل. بعد ذلك ، استدعاء أمر 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" ]
}
]
}يحتوي دليل المستندات على وثائق إضافية حول مواضيع محددة للعقدة التي قد تكون مفيدة إذا كنت تواجه مشاكل في تثبيت أو بناء الإضافات باستخدام Node-GYP.
بعض الموارد الإضافية لـ Node.js الإضافات الأصلية وكتابة ملفات تكوين gyp :
يستجيب node-gyp للأوامر التالية:
| يأمر | وصف |
|---|---|
help | يعرض مربع الحوار المساعدة |
build | يستدعي make / msbuild.exe ويبني الملحق الأصلي |
clean | يزيل دليل build إذا كان موجودًا |
configure | يولد ملفات بناء المشروع للنظام الأساسي الحالي |
rebuild | يعمل clean configure build كل شيء على التوالي |
install | يقوم بتثبيت ملفات رأس node.js للإصدار المحدد |
list | يسرد إصدارات رأس Node.js المثبتة حاليًا |
remove | يزيل ملفات رأس node.js للإصدار المحدد |
يقبل node-gyp خيارات الأوامر التالية:
| يأمر | وصف |
|---|---|
-jn ، --jobs n | تشغيل make بالتوازي. سوف تستخدم القيمة max جميع نوى وحدة المعالجة المركزية المتاحة |
--target=v6.2.1 | إصدار Node.js للبناء (الافتراضي هو process.version ) |
--silly ، --loglevel=silly | قم بتسجيل كل التقدم في وحدة التحكم |
--verbose ، --loglevel=verbose | سجل معظم التقدم في وحدة التحكم |
--silent ، --loglevel=silent | لا تسجل أي شيء إلى وحدة التحكم |
debug ، --debug | جعل تصحيح التصحيح (الافتراضي هو Release ) |
--release ، --no-debug | جعل بناء الإصدار |
-C $dir ، --directory=$dir | تشغيل الأمر في دليل مختلف |
--make=$make | تجاوز make (مثل gmake ) |
--thin=yes | تمكين مكتبات ثابتة رقيقة |
--arch=$arch | تعيين الهندسة المعمارية المستهدفة (مثل IA32) |
--tarball=$path | احصل على رؤوس من كرة قطران محلية |
--devdir=$path | دليل تنزيل SDK (الافتراضي هو دليل OS Cache) |
--ensure | لا تعيد تثبيت الرؤوس إذا كانت موجودة بالفعل |
--dist-url=$url | قم بتنزيل Tarball من عنوان URL المخصص |
--proxy=$url | تعيين وكيل HTTP (S) لتنزيل Tarball رأس |
--noproxy=$urls | تعيين عناوين URL لتجاهل الوكلاء عند تنزيل Tarball رأس |
--cafile=$cafile | تجاوز سلسلة CA الافتراضية (لتنزيل Tarball) |
--nodedir=$path | اضبط المسار على رمز مصدر العقدة |
--python=$path | اضبط الطريق إلى ثعبان ثعبان |
--msvs_version=$version | اضبط إصدار Visual Studio (Windows فقط) |
--solution=$solution | اضبط إصدار حل Visual Studio (Windows فقط) |
--force-process-config | القوة باستخدام كائن process.config لإنشاء ملف 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 استخدم Form OPTION_NAME لأي من خيارات الأوامر المذكورة أعلاه.
على سبيل المثال ، لتعيين devdir يساوي /tmp/.gyp ، ستقوم بتشغيل:
npm config set [--global] devdir /tmp/.gyp ملاحظة: سيتم استخدام تعيين التكوين عبر npm فقط عند تشغيل node-gyp عبر npm ، وليس عند تشغيل node-gyp مباشرة.
node-gyp متاح بموجب ترخيص MIT. انظر ملف الترخيص للحصول على التفاصيل.