مرحباً ، هبر وسكانها! كنت أرغب في نحت شيء في HTML و JS بحيث يكون سطح المكتب ومريحًا. ما هو المطلوب لهذا؟ حق. Node.js و NW.js أو إلكترون. بالنظر إلى المحاولات الضعيفة لـ NW vs Electron holivar وقراءة وثائق كليهما ، تم اتخاذ القرار لبدء الشعور بـ NW.js.
ولكن هنا كمين. يعمل تشغيل
npm i sqlite3
تثبيت المكتبات فقط التي يمكن تنفيذها عند تشغيلها مباشرة من خلال العقدة. وإذا حاولت توصيل البرنامج النصي في html وتشغيل هذا html في NW.js ، فلن يأتي منه شيء. يقدم مساعدو Google وصفة واحدة فقط لتضمين sqlite في مشروع على nw.js ، وحتى يجب سحبها من ذاكرة التخزين المؤقت. نعم ، وقد عفا عليه الزمن بالفعل. لذلك ، تم قضاء يومين في دراسة المشكلات وإيجاد حل عملي. أطلب القط.
لذا بادئ ذي بدء ، تم بناء الجهاز "من ما كان عليه" وتثبيت Windows 7 x32 مع حزمة .NET 4.7.1 (مطلوب لـ Visual C ++). لماذا 32 بت؟ قررت أن أبدأ صغيرة. على الرغم من أنه ، كما اتضح ، فإن إنشاء وحدة نمطية لـ x64 لا يتطلب التنفيذ على نظام x64.
ثم تم تثبيت الإصدار 10.8.0 من Node.js ، على الرغم من ظهور 10.9.0 بالفعل في نهاية التجارب. ولكن بعد ذلك قررت الاستماع إلى الأشخاص المطلعين:

بعد التفكير في الأمر ، قررت أنني كنت أفعل ذلك على نفس النحو بالنسبة إلى LTS ، على الرغم من أنه ليس من الواضح تمامًا أين لديهم جميعهم LTS وأين لا. واقترح أن غير LTS هي إصدارات بيتا وألفا وليلي.
على الرغم من أن أي تسرب ترك كل شيء إلى النصف وتم تنفيذ التوصية التالية:
توصية توثيق لإصدارات LTSفي نظام التشغيل Windows ، تحتاج إلى استبدال الملف
<npm-path> \ node_modules \ node-gyp \ src \ win_delay_load_hook.cc مع الموجود على github.com/nwjs/nw.js/blob/nw18/tools/win_delay_load_hook.cc قبل تثبيت الوحدات باستخدام node-gyp أو npm.
حسنًا ، لم أجد هذا الملف على جهاز الكمبيوتر الخاص بي. ربما لأنني لم أقوم بتثبيت عقدة جيب.
قمنا بتعيينه للعقدة (من الضروري للغاية القيام بذلك من سطر الأوامر مع حقوق المسؤول)
npm i -g nw-gyp
في الواقع ، استبدال العقدة - الجيبnw-gyp هو اختراق على nyp-gyp لدعم رؤوس NW.js والمكتبات الخاصة.
بعد ذلك - قم بتنزيل Visual Studio Community Edition (الرابط الحالي يمكن العثور عليه بسهولة في محرك البحث المفضل لديك) - في وقت كتابة هذا المقال هو الإصدار الحالي لعام 2017. ما هو مهم بالنسبة لنا - يحتوي على أدوات البناء 2015 - بينما يتم تجميع الوحدات الأصلية في العقدة فقط مع هذا الإصدار والمزيد الطازجة لا تدعم. قم بتنزيل المثبت ،
وقم بتشغيله ووضع علامة اختيار واحدة في علامة التبويب "المكونات الفردية" -
Toolbox VC ++ 2015.3 v14.00 (v140) للكمبيوتر الشخصي
تعد حزمة Windows 8.1 SDK المضافة ضرورية أيضًا ، لذلك نقوم بتثبيت جميع النقاط الثلاث. التثبيت في هذا النموذج يؤدي إلى قفزة 2.89 غيغابايت من كل ما تحتاجه.
نذهب أبعد من ذلك - نحن نتأرجح ثعبان. والإصدار 2.7. التثبيت بشكل افتراضي في C: \ Python27.
والآن -
الانتباه! كمين.بشكل افتراضي ، يعتقد المثبت أنه ليس من الضروري إضافة موقع python إلى المسار ، وبالتالي ، فإننا نزيل سوء الفهم هذا في مرحلة التثبيت

كمين مشابه يطارد العديد من المطورين عند بناء مجموعة متنوعة من الوحدات للعقدة. وكل ذلك لأن الشركة الصغيرة لا تعتبر أنه من الضروري وصف مسارات إبداعاتها. إن github ببساطة مغمور بأخطاء البناء بسبب حقيقة أنه بعد التثبيت ، لا يدخل المسار إلى أدوات التجميع في PATH. نقوم أيضًا بتصحيح سوء الفهم هذا - نقوم بتصحيح متغير البيئة بحيث يسمح للتجميع بالذهاب إن لم يكن بسلاسة تامة ، ثم على الأقل بدون أخطاء. إليك ما حدث لي (انقسم إلى خطوط لتحسين الإدراك)
>echo %PATH%
C:\Python27\;
C:\Python27\Scripts;
C:\Windows\system32;
C:\Windows;
C:\Windows\System32\Wbem;
C:\Windows\System32\WindowsPowerShell\v1.0\;
C:\Program Files\nodejs\;
C:\Users\Den\AppData\Roaming\npm;
C:\Program Files\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin;
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\v140;
تمييز بخط عريض هو ما تحتاج إلى إضافته يدويًا. بطبيعة الحال ، التأكد من وجود هذه المسارات.
عنصر إلزامي -
إعادة التشغيل .
حسنا ، الآن التجمع الفعلي. لقد استخدمت مدير الجيش الملكي ، ولكن لا أحد يمنع cmd المدرسة القديمة
c:\
md app
cd \app
npm init
npm install sqlite3 --build-from-source --runtime=node-webkit --target_arch=ia32 --target=0.32.1 --msvs_version=2015
بالنسبة إلى x64 ، نغير --target_arch = x64.
حسنًا ، هذا كل شيء. إذا تم كل شيء بشكل صحيح ، فعندئذٍ يمر التجميع بعدد معين من الرسائل مثل
..\src\database.cc(672): warning C4996: 'Nan::MakeCallback': deprecate [C:\app\node_modules\sqlite3\build\node_sqlite3.vcxproj]
C:\app\node_modules\nan\nan.h(929): note: . "Nan::MakeCallback"
c:\app\node_modules\nan\nan_new.h(208): warning C4244: : "sqlite3_int64" "double", ( ..\src\database.cc) [C:\app\node_modules\sqlite3\build\node_sqlite3.vcxproj]
ولكن في النهاية يتم تجميع الوحدة وتقع في
C:/app/node_modules/sqlite3/lib/binding/node-webkit-v0.32.1-win32-ia32\node_sqlite3.node
فارق بسيط في التجميع - مع كل تجميع ، يتم حذف المجلد node_modules / sqlite3 / lib بواسطة المجمع. لذلك ، إذا كانت هناك حاجة لتجميع وحدتين (لكل بنية) ، فاحفظ النتيجة المتوسطة.
نشكركم على اهتمامكم ، أخيراً ، نتيجة التجربة:
وحدات مجمعة لـ NW.js 0.32.1 ia32 && x64 على Google