Как развернуть приложения Node.js как один исполняемый файл?
Предположим, что я написал приложение Node.js, и теперь я хотел бы его распространять. Конечно, я хочу сделать это легко для пользователя, поэтому я не хочу, чтобы он установил Node.js, запустил npm install
, а затем вручную напечатал node app.js
.
Я бы предпочел один исполняемый файл, например. файл .exe
в Windows.
Как я могу подойти к этому?
Я знаю этот поток, в любом случае это касается только Windows. Как я мог достичь этого в платформенно-независимой манере? Есть идеи? Лучшие практики?...
Идеальное решение было "компилятором", я могу предоставить исходную папку. Исходная папка содержит само приложение в различных файлах .js
, папке node_modules
и некоторых метаданных, таких как package.json
. Результат должен быть двоичным кодом для различных платформ, таких как Windows, OS X и Linux.
О, и что важно: я не хочу вносить какие-либо изменения в исходный код, поэтому вызовы require
с относительными путями должны работать, даже если этот относительный путь теперь находится внутри упакованного приложения.
Любые идеи?
PS: Я не хочу, чтобы пользователь самостоятельно устанавливал Node.js, он также должен быть включен в исполняемый файл.
Ответы
Ответ 1
Тем временем я нашел идеальное решение для меня: nexe, который создает один исполняемый файл из Node.js включая все его модули.
Хотя на данный момент у него есть некоторые недостатки (не работает в Windows и не поддерживает двоичные модули), это лучшее, что нужно для идеального решения.
Ответ 2
Во-первых, мы говорим об упаковке приложения Node.js для семинаров, демонстраций и т.д., где это может быть удобно, если приложение "работает" без необходимости для конечного пользователя заботиться об установке и зависимостей.
Вы можете попробовать следующую настройку:
- Получить исходный код приложений
-
npm install
все зависимости (через package.json) в каталог локальный node_modules. Важно выполнить этот шаг на каждой платформе, которую вы хотите поддерживать отдельно, в случае двоичных зависимостей.
- Скопируйте Node.js binary - Node.exe в Windows (возможно)/usr/local/bin/node в OS X/Linux в корневую папку проекта. В OS X/Linux вы можете найти расположение двоичного файла Node.js с
which node
.
Для Windows:
Создайте архив самораспаковывающегося архива, 7zip_extra поддерживает способ выполнения команды сразу после извлечения, см. http://www.msfn.org/board/topic/39048-how-to-make-a-7-zip-switchless-installer/.
Для OS X/Linux:
Вы можете использовать такие инструменты, как makeself или unzipsfx (я не знаю, скомпилировано ли это с CHEAP_SFX_AUTORUN, определенным по умолчанию).
Эти инструменты будут извлекать архив во временный каталог, выполнять заданную команду (например, node app.js
) и удалять все файлы по завершении.
Ответ 3
Не бить мертвую лошадь, но решение, которое вы описываете, похоже на Node-Webkit.
Из Git Страница:
node -webkit - это время выполнения приложения на основе Chromium и node.js. Вы можете писать собственные приложения в HTML и JavaScript с помощью node -webkit. Он также позволяет вам вызывать модули node.js непосредственно из DOM и позволяет новый способ записи собственных приложений со всеми веб-технологиями.
Эти инструкции подробно описывают создание одного файлового приложения, которое пользователь может выполнить, и эту часть описывает внешние зависимости.
Я не уверен, что это точное решение, но оно кажется довольно близким.
Надеюсь, что это поможет!
Ответ 4
JXcore позволит вам превратить любое приложение nodejs в один исполняемый файл, включая все зависимости, в Windows, Linux или Mac OS X.
Вот ссылка на установщик:
https://github.com/jxcore/jxcore-release
И вот ссылка на то, как его настроить:
http://jxcore.com/turn-node-applications-into-executables/
Он очень прост в использовании, и я тестировал его как в Windows 8.1, так и в Ubuntu 14.04.
FYI: JXcore - это вилка NodeJS, поэтому она совместима с NodeJS на 100%, с некоторыми дополнительными функциями.
Ответ 5
В дополнение к nexe browserify можно использовать для объединения всех ваших зависимостей в виде одного файла .js
. Это не связывает фактический исполняемый файл node, просто обрабатывает сторону javascript. Он также не обрабатывает собственные модули. Параметры командной строки для чистой компиляции node будут browserify --output bundle.js --bare --dg false input.js
.
Ответ 6
Для создания установщика необходимо выполнить несколько шагов, и это зависит от каждой операционной системы. Например:
Ответ 7
Я пытался использовать makeelf и был успешным. проблем нет. документированные шаги @https://www.linkedin.com/pulse/article/deploying-nodejs-single-executableruntime-amit-gupta
Ответ 8
Вы можете создать репозиторий git и установить ссылку на репозиторий node git в качестве зависимости. Тогда любой пользователь, который клонирует репо, также может установить node.
#git submodule [--quiet] add [-b branch] [-f|--force]
git submodule add /var/Node-repo.git common
Вы можете легко упаковать script до автоматического клонирования репозитория git, который вы размещали где-то, и "установить" из одного этого script файла.
#!/bin/sh
#clone git repo
git clone your-repo.git