Упаковка приложения Node.js в один исполняемый файл.
Для составления любого проекта с node-packer требуется менее 5 минут.
Вам не нужно будет изменять одну строку кода в вашем приложении, независимо от того, как вы разработали ее, пока она работает в простом Node.js!
Windows,
macos и
Linuxrequire , включая динамические (например require(myPath + 'module.js' )Вот последний релиз Stable Node.js Packer:
| ОС | Архи | Исполняемый файл |
|---|---|---|
| Окна | x64 | https://gw.alipayobjects.com/os/enclose-prod/0d0ec8fd-dc9c-4b0a-85df-8bf4af0e8b8d/nodec-v1.5.0-x64.zip |
| macOS | x64 | https://gw.alipayobjects.com/os/enclose-prod/bc2022ef-4b88-4c12-9980-394945c9c198/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 |
Всякий раз, когда преуспел в master ветви CI, был бы автоматически генерировать бинарную бинарную карьеру Node.js Packer. Вот последняя нестабильная сборка перед выпуском:
| ОС | Архи | Исполняемый файл |
|---|---|---|
| Окна | x64 | https://github.com/pmq20/node-packer/releases/download/windows-x64/pre-release-nodec-v140800.121803-x64.exe |
| macOS | x64 | https://github.com/pmq20/node-packer/releases/download/darwin-x64/pre-release-nodec-v140800.121803-darwin-x64 |
| Linux | x64 | https://github.com/pmq20/node-packer/releases/download/linux-x64/pre-release-nodec-v140800.121803-linux-x64 |
Установите на WindowsСначала установите предпосылки:
Затем загрузите nodec-x64.exe .
При желании поместите его в C:Windows или любые другие каталоги PATH . Откройте командную строку Visual Studio «Native Tools Native Tools» и выполнить nodec --help в ней.
Установите на macOSСначала установите предпосылки:
brew install squashfsCommand Line Tools через XCODE. Вы можете найти это в меню Xcode -> Preferences -> Downloadsgcc и соответствующий инструмент, make Затем загрузите nodec-darwin-x64 .
Запустите chmod +x , чтобы дать ему разрешения на выполнение и выполнить ./nodec --help .
Согласно недавней сборке Travis, тестовые примеры потерпят неудачу вскоре после того, как его запуск произойдет, когда среда сборки - 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 .
Известно, что репо по умолчанию для 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 ++ снаружи из официальных репо. Для начала можно посмотреть:
Кроме того, двоичные файлы, которые составлены из Ubuntu 18.04 LTS, известно, что не работают в дистрибуции Red Hat 7 (включая Centos) из -за «Glibcxx_3.4.20», не найденной «связанной с этим» ошибкой. Тем не менее, двоичные файлы, которые составлены либо из Red Hat, либо Centos 7, как известно, работают с Ubuntu 18.04 LTS на основе моего внутреннего эксперимента.
Сказав это, я все равно буду рекомендовать, чтобы бинарские дистрибьюторы собирали 2 версии для 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/releases/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 Node.js.
ПРИМЕЧАНИЕ. Чтобы составить 32-разрядные программы совместимых с ОС Windows на 64-битной машине, вам следует использовать среду Cross Complination X64 x32. Вы сможете найти его в своем меню «Пуск» после установки Visual Studio. Кроме того, вы должны использовать 32 -битный node.js, потому что информация о арке обнаруживается с помощью 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 взломала fs.* API динамически, чтобы получить доступ к файлам в пакете, тогда как Node.js Packer оставляет их в одиночку и вместо этого работает на более глубоком уровне через Libsquash. PKG использует JSON для хранения файлов в пакете, в то время как Node.js Packer использует более сложные и широко используемые Squashfs в качестве структуры данных. |
| Enclosejs | Enclosejs ограничивает доступ к файлам вкусов только пятью fs.* API, тогда как Node.js Packer поддерживает все fs.* API. EncloseJS является лицензированным лицензией и взимает деньги при использовании, в то время как Node.js Packer лицензирован, а пользователи могут свободно использовать его и бесплатно его модифицировать. |
| Nexe | Nexe не поддерживает динамические require из -за его использования browserify , тогда как Node.js Packer поддерживает все виды require включая require.resolve . |
| асар | ASAR сохраняет архив кода и исполняемый файл отдельно, в то время как Node.js Packer ссылается на все исходное код JavaScript вместе с виртуальной машиной Node.js и генерирует один исполняемый файл в качестве конечного продукта. Asar использует JSON для хранения информации файлов, в то время как Node.js Packer использует Squashfs. |
| Аппетич | Appimage поддерживает только Linux с ядром, который поддерживает Squashfs, в то время как Node.js Packer поддерживает все три платформы Linux, MacOS и Windows, тем временем без каких -либо специальных функций из ядра. |
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.
Грань