تعبئة تطبيق Node.js في واحد قابل للتنفيذ.
يستغرق الأمر أقل من 5 دقائق لتجميع أي مشروع باستخدام node-packer .
لن تحتاج إلى تعديل سطر واحد من التعليمات البرمجية في التطبيق الخاص بك ، بغض النظر عن كيفية تطويره طالما أنه يعمل في Plain Node.js!
النوافذ ،
ماكوس و
Linuxrequire ، بما في ذلك تلك الديناميكية (على سبيل المثال require(myPath + 'module.js' )فيما يلي أحدث إصدار مستقر Node.js Packer:
| نظام التشغيل | قوس. | قابلة للتنفيذ |
|---|---|---|
| النوافذ | x64 | https://gw.alipayobjects.com/os/enclose-prod/0d0ec8fd-dc9c-4b0a-85df-8bf4af0e8b8d/nodec-v1.5.0-x64.zip |
| ماكوس | x64 | https://gw.alipayobjects.com/os/enclose-prod/BC20222EF-4B88-4C12-9980-394945C98/NODEC-V1.5.0-DARWIN-X64.GZ |
| Linux | x64 | https://gw.alipayobjects.com/os/enclose-prod/b6aa41a6-f6b5-4542-b777-06e4bc292c5e/nodec-v1.5.0-linux-x64.gz |
كلما نجحت CI الفرع master ، سيتم إنشاء Node.js Packer قبل الإصدار تلقائيًا. فيما يلي أحدث بناء غير مستقر قبل الإصدار:
| نظام التشغيل | قوس. | قابلة للتنفيذ |
|---|---|---|
| النوافذ | x64 | https://github.com/pmq20/node-packer/release/download/windows-x64/pre-release-nodec-v140800.121803-x64.exe |
| ماكوس | x64 | https://github.com/pmq20/node-packer/release/download/darwin-x64/pre-release-nodec-v140800.121803-darwin-x64 |
| Linux | x64 | https://github.com/pmq20/node-packer/release/download/linux-x64/pre-release-nodec-v140800.121803-linux-x64 |
تثبيت على Windowsقم أولاً بتثبيت المتطلبات المسبقة:
ثم تنزيل nodec-x64.exe .
اختياريا ، ضعه تحت C:Windows أو أي أدلة PATH أخرى. افتح "موجه أوامر أدوات X64 Native Tools" وتنفيذ nodec --help فيه.
تثبيت على MacOSقم أولاً بتثبيت المتطلبات المسبقة:
brew install squashfsCommand Line Tools عبر XCode. يمكنك العثور على هذا ضمن القائمة Xcode -> Preferences -> Downloadsgcc و MAINCHAIN ذات الصلة التي تحتوي make ثم قم بتنزيل nodec-darwin-x64 .
قم بتشغيل chmod +x لمنحه أذونات التنفيذ وتنفيذ ./nodec --help .
وفقًا لـ Travis Build الأخيرة ، ستفشل حالات الاختبار بعد فترة وجيزة من إطلاقها عندما تكون بيئة البناء هي Xcode 11. حاليًا ، لا يُعرف ما إذا كانت المشكلة ناتجة عن Xcode 11 أو عوامل أخرى داخل Travis CI والتي قد لا تؤثر على نشر MacOS الفعلي.
لذلك ، فإن بيئة الإنشاء لـ MacOS تحت Travis هي Xcode 10.2 وذلك لضمان تنفيذ حالة الاختبار وإكمالها بنجاح.
تثبيت على Linuxقم أولاً بتثبيت المتطلبات المسبقة:
sudo yum install squashfs-toolssudo apt-get install squashfs-toolsgcc و g++ 4.9.4 أو أحدث ، أوclang و clang++ 3.4.2 أو الأحدث ثم تنزيل nodec-linux-x64 .
قم بتشغيل chmod +x لمنحه أذونات التنفيذ وتنفيذ ./nodec --help .
من المعروف أن REPO الافتراضي لـ Red Hat و CentOs Distros يحتوي على GCC / G ++ قديم جدًا (3.8.5) في حين أن أحدث دعم طويل الأجل (LTS) في Ubuntu اعتبارًا من 15 فبراير 2018 (Ubuntu 18.04 LTS) يحتوي على GCC / G ++ (7.3.0).
من المعروف أن التجميع يمكن أن يفشل عند استخدام التكوين غير المدعوم حيث يكون إصدار المتطلبات المسبقة أقدم من الموصوف.
لذلك ، من الأهمية بمكان بالنسبة لمستخدمي Distros القائم على Red Hat تثبيت GCC / G ++ في الخارج من repos الرسمية. بالنسبة للمبتدئين ، قد ينظر المرء إلى:
بالإضافة إلى ذلك ، يُعرف الثنائيات التي يتم تجميعها من Ubuntu 18.04 LTS بعدم العمل في توزيعة Red Hat 7 (بما في ذلك CentOs) بسبب خطأ "GLIBCXX_3.4.20" غير موجود ". ومع ذلك ، من المعروف أن الثنائيات التي يتم تجميعها من Red Hat أو CentOS 7 تعمل مع Ubuntu 18.04 LTS بناءً على تجربتي الداخلية.
بعد قولي هذا ، ما زلت أوصي بأن يقوم موزعو الثنائيات بتجميع نسختين لـ Linux حيث يلبي المرء أن يعتمد على RHEL والآخر لـ Ubuntu.
وفقًا لـ Travis Build الأخيرة ، فشل Linux في البناء منذ NODEC-1.6.0-10.16.0 (Node.js 10.16.0). لم يتم تحديد السبب الجذري بعد ، وآخر بنية جيدة معروفة هي 10.15.3 والتي يمكن تنزيلها هنا: https://github.com/slee047/node-packer/release/tag/1.6.0-10.15.3-1
يمكن العثور على المشكلة هنا: https://github.com/slee047/node-packer/issues/11
ملاحظة: يحتوي ملف GZ هذا (NODEC-DARWIN-X64.GZ) على إصدار قديم من NODEC (NODEC 1.5.0 مع NODE.JS 8.3.0). لم يحدد المشرف الأصلي كيفية إنشاء هذا الريبو إلى واحد قابل للتنفيذ ، وبالتالي لا يمكن تشغيل الإصدارات الأحدث إلا على رمز المصدر مباشرة.
nodec [OPTION]... [ENTRANCE]
--current Uses the current Node.js release
--lts Uses the LTS Node.js release
-r, --root=DIR Specifies the path to the root of the application
--output=FILE Specifies the path of the output file
-d, --tmpdir=DIR Specifies the directory for temporary files
--clean-tmpdir Cleans all temporary files that were generated last time
--keep-tmpdir Keeps all temporary files that were generated last time
--make-args=ARGS Passes extra arguments to make
--vcbuild-args=ARGS Passes extra arguments to vcbuild.bat
-n, --npm=FILE Specifies the path of npm
--skip-npm-install Skips the npm install process
--debug Enables debug mode
-o, --dest-os=OS Specifies the destination operating system (enum: win mac solaris freebsd openbsd linux android aix)
-a, --dest-arch=ARCH Specifies the destination CPU architecture (enum: arm arm64 ia32 mips mipsel ppc ppc64 x32 x64 x86 s390 s390x)
--quiet Enables quiet mode
-v, --version Prints the version of nodec and exit
-h, --help Prints this help and exit
ملاحظة: إذا لم يتم توفير المدخل ، فسيتم إنتاج مترجم Raw.js القابل للتنفيذ.
ملاحظة: لتجميع البرامج المتوافقة مع Windows OS 32 بت على جهاز 64 بت ، يجب عليك استخدام بيئة تجميع متقاطعة X64 X32. يجب أن تكون قادرًا على العثور عليها في قائمة البداية الخاصة بك بعد تثبيت Visual Studio. أيضًا ، يجب عليك استخدام Node.js 32 بت ، لأنه تم اكتشاف معلومات القوس عبر node -pe process.arch .
git clone --depth 1 https://github.com/jashkenas/coffeescript.git
cd coffeescript
nodec bin/coffee
./a.out (or a.exe on Windows)
git clone --depth 1 https://github.com/eggjs/examples.git
cd examples/helloworld
npm install
nodec node_modules/egg-bin/bin/egg-bin.js
./a.out dev (or a.exe dev on Windows)
| مشروع | الاختلافات |
|---|---|
| PKG | اخترق PKG fs.* API ديناميكيًا للوصول إلى الملفات داخل الحزم ، في حين أن Node.js Packer يتركهم بمفردهم ويعمل بدلاً من ذلك على مستوى أعمق عبر libsquash. يستخدم PKG JSON لتخزين الملفات داخل الحزم بينما تستخدم Node.js Packer squashfs الأكثر تطوراً واستخدامًا على نطاق واسع كهيكل بياناتها. |
| أرفق | يقيد expresjs الوصول إلى الملفات داخل الحزم إلى خمسة فقط fs.* API ، في حين تدعم Node.js Packer جميع fs.* API's. enclosejs هو مرخصة خاصة وتتقاضى أموالًا عند استخدامها بينما يتم ترخيص Node.js Packer ويكون المستخدمون مجانيين في استخدامه ومجانًا لتعديله. |
| Nexe | لا تدعم Nexe Dynamic require بسبب استخدامها browserify ، في حين تدعم Node.js Packer جميع أنواع require بما في ذلك require.resolve . |
| أسار | يحتفظ ASAR بأرشيف التعليمات البرمجية والانفصال القابل للتنفيذ بينما يربط Node.js Packer جميع التعليمات البرمجية JavaScript مع الجهاز الظاهري Node.js ويقوم بإنشاء واحد قابل للتنفيذ كمنتج نهائي. يستخدم Asar JSON لتخزين معلومات الملفات بينما تستخدم Node.js Packer squashfs. |
| appimage | يدعم AppImage Linux فقط مع kernel يدعم squashfs ، بينما يدعم Node.js Packer جميع المنصات الثلاثة من Linux و MacOs و Windows ، وفي الوقت نفسه دون أي متطلبات ميزة خاصة من kernel. |
nodec أيضا تدعم التثبيت المتبادل. نظرًا لأن Node.js مبنية من مصادر ، فستحتاج إلى إعداد مخطط أدوات بشكل صحيح من أجل الحصول على مجمعين صالحين لإنتاج ثنائيات لمنصة الوجهة.
يمكنك بسهولة القيام بذلك باستخدام Crosstool-NG أو أي أداة أخرى تريدها.
بمجرد الانتهاء من بناء مجموعة أدوات صالحة (لا تنس تمكين C ++ إذا كنت تستخدم Crosstool-NG والتي تستبعده افتراضيًا) ، ستتمكن من التجميع بشكل صحيح. ما عليك سوى إعداد بيئتك بحيث ستعرف استخدام مخطط الأدوات المتقاطع بدلاً من أدوات الإنشاء الافتراضية لنظامك.
مثال (قد تحتاج إلى ضبط القيم أو تحديد متغيرات إضافية):
export AR="x86_64-unknown-linux-gnu-ar"
export CC="x86_64-unknown-linux-gnu-gcc"
export CXX="x86_64-unknown-linux-gnu-g++"
export LINK="x86_64-unknown-linux-gnu-g++"
export CPP="x86_64-unknown-linux-gnu-gcc -E"
export LD="x86_64-unknown-linux-gnu-ld"
export AS="x86_64-unknown-linux-gnu-as"
export CCLD="ax86_64-unknown-linux-gnu-gcc ${TARGET_ARCH}"
export NM="x86_64-unknown-linux-gnu-nm"
export STRIP="x86_64-unknown-linux-gnu-strip"
export OBJCOPY="x86_64-unknown-linux-gnu-objcopy"
export RANLIB="x86_64-unknown-linux-gnu-ranlib"
export F77="x86_64-unknown-linux-gnu-g77 ${TARGET_ARCH}"
unset LIBC
#Define flags
#export CXXFLAGS="-march=armv7-a"
export LDFLAGS="-L${CSTOOLS_LIB} -Wl,-rpath-link,${CSTOOLS_LIB} -Wl,-O1 -Wl,--hash-style=gnu"
export CFLAGS="-isystem${CSTOOLS_INC} -fexpensive-optimizations -frename-registers -fomit-frame-pointer -O2 -ggdb3"
export CPPFLAGS="-isystem${CSTOOLS_INC}"
# export CCFLAGS="-march=armv7-a"
#Tools
export CSTOOLS=/Volumes/crosstools/x86_64-unknown-linux-gnu
export CSTOOLS_INC=${CSTOOLS}/include
export CSTOOLS_LIB=${CSTOOLS}/lib
#export ARM_TARGET_LIB=$CSTOOLS_LIB
# export GYP_DEFINES="armv7=1"
#Define other things, those are not 'must' to have defined but we added
export SHELL="/bin/bash"
export TERM="screen"
export LANG="en_US.UTF-8"
export MAKE="make"
#Export the path for your system
#export HOME="/home/gioyik" #Change this one with the name of your user directory
export PATH=${CSTOOLS}/bin:/usr/arm-linux-gnueabi/bin/:$PATH
Minqi Pan et al.
معهد ماساتشوستس للتكنولوجيا