Как развернуть приложения 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

Для создания установщика необходимо выполнить несколько шагов, и это зависит от каждой операционной системы. Например:

Ответ 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