Как сделать exe файлы из приложения node.js?

У меня есть приложение node, которое я написал, что я запускаю следующим образом:

node.exe app.js inputArg

Можно ли каким-либо образом упаковать его в .exe? Так что я могу просто сделать что-то вроде этого?

App.exe inputArg

У меня есть способ подделать это, используя пакетный файл, поэтому я могу это сделать:

App.bat inputArg

Но для этого требуется, чтобы у меня были все зависимости и node в этой папке, что не идеально.

Ответ 1

Есть несколько альтернатив, как бесплатных, так и коммерческих. Я не использовал ни одного из них, но теоретически они должны работать:

Большинство из них потребует от вас сохранить командный файл в качестве основного исполняемого файла, а затем связать node.exe и ваши скрипты.

В зависимости от вашего сценария у вас также есть возможность перенести его в JSDB, который поддерживает простой способ создания исполняемых файлов, просто добавляя к нему ресурсы.

Третье квази-решение - сохранить узел где-то вроде C:\utils и добавить эту папку в PATH окружения PATH. Затем вы можете создавать .bat файлы в этом каталоге, который запускает node + ваши любимые скрипты - я получил coffee coffeescript, работающий с Windows таким образом. Эта настройка может быть автоматизирована с помощью пакетного файла, VB-скрипта или установщика.

Ответ 2

Решением, которое я использовал, является Roger Wang node-webkit.

Это фантастический способ пакетных приложений nodejs и их распространения, он даже дает вам возможность "связывать" все приложение как единый исполняемый файл. Он поддерживает Windows, Mac и Linux.

Здесь приведены некоторые документы о различных вариантах развертывания приложений node -webkit, но в двух словах вы делаете следующее:

  • Замените все ваши файлы с помощью package.json в корневом каталоге
  • Измените расширение с .zip на .nw
  • copy/b nw.exe + app.nw app.exe

Как добавленное примечание - я использовал несколько приложений для производства/установки cd, используя это, и он отлично работал. Такое приложение запускается в Windows, Mac, Linux и через Интернет.

Ответ 3

Для тех, кто сталкивается с этим вопросом, теперь есть два проекта, которые создают exe файлы из ваших проектов узлов, Pkg и Electron.atom.io, они немного отличаются:

  1. Pkg скомпилирует ваш проект в собственный код, они также включают ресурсы и установку nodejs (системе не нужно устанавливать nodejs для выполнения .exe). Ваш исходный код не будет включен. Получающийся исполняемый файл - ТОЛЬКО для Windows (.exe). Все платформы поддерживаются. Теперь требуется лицензия на коммерческие продукты. Полностью с открытым исходным кодом.
  2. Electron.atom.io, хотя он не будет компактировать и генерировать .exe для вас, он МОЖЕТ использоваться для распространения приложений nodejs, поскольку они предлагают способ распространения приложений. Преимущества в том, что Electron является мультиплатформенным (Windows, Mac OSX, Linux), минусы в том, что ваш исходный код будет включен, даже если они предлагают способ распространения вашего приложения в архиве asar. Это не будет пуленепробиваемым, но все же лучше, чем ваш источник на равнине.

Ответ 4

По умолчанию Windows связывает файлы .js с Windows Script Host, автономным механизмом JS для автономной работы Microsoft. Если вы введете script.js в командной строке (или дважды щелкните файл .js в проводнике), Script выполняется wscript.exe.

Это может быть решение локальной проблемы с глобальными настройками, но вы можете associate .js с node.exe вместо этого, чтобы набрав script.js в командной строке или дважды щелкнув/перетащив элементы на скрипты, они запустили их с помощью Node.

Конечно, если — например, me — вы связали файлы .js с редактором, чтобы двойной щелчок по ним открыл ваш любимый текстовый редактор, это предложение не принесет много пользы. Вы также можете добавить пункт меню "Щелчок правой кнопкой мыши" в "Execute with Node" to .js, хотя этот вариант не позволяет удовлетворить ваши потребности в командной строке.


Самое простое решение, вероятно, просто использовать пакетный файл – вам не нужно иметь копию Node в папке, в которой находится ваш Script. Просто выполните ссылку Node:

"C:\Program Files (x86)\nodejs\node.exe" app.js %*

Другой альтернативой является это очень простое приложение С#, которое запустит Node, используя свое собственное имя файла + .js в качестве Script для запуска и передаст любые аргументы командной строки.

class Program
{
    static void Main(string[] args)
    {
        var info = System.Diagnostics.Process.GetCurrentProcess();
        var proc = new System.Diagnostics.ProcessStartInfo(@"C:\Program Files (x86)\nodejs\node.exe", "\"" + info.ProcessName + ".js\" " + String.Join(" ", args));
        proc.UseShellExecute = false;
        System.Diagnostics.Process.Start(proc);
    }
}

Итак, если вы назовете полученный EXE "app.exe", вы можете ввести app arg1 ... и Node будет запущен с командной строкой "app.js" arg1 .... Обратите внимание, что приложение C bootstrapper немедленно выйдет, оставив Node ответственным за консольное окно.

Поскольку это, вероятно, довольно широкий интерес, я пошел дальше и сделал это доступным на GitHub, включая скомпилированный exe, если попасть в фургоны с незнакомыми людьми - это ваша вещь.

Ответ 5

Лучший инструмент, который я знаю, это инструмент NodeJS: zeit/pkg

Он очень прост в использовании (гораздо больше, чем Nexe, просто в качестве примера), вы можете просто установить его глобально: npm install -g pkg

создать исполняемые файлы для macOS, Linux и Windows:

pkg exampleApp.js

У меня был немного сложный код, который использовал сервер сокетов NodeJS, я пробовал разные приложения, ни одно из них не создавало его должным образом, кроме zeit/pkg.

Ответ 6

Поскольку на этот вопрос был дан ответ, было запущено другое решение.

https://github.com/appjs/appjs

На момент написания этой статьи это окончательное решение для упаковки приложений node.js через удаленный пакет хрома, скомпилированный в исполняемый файл.

Изменить: AppJS больше неактивен, но сам предлагает вилку под названием deskshell.

https://github.com/sihorton/appjs-deskshell/

Ответ 7

Здесь есть много хороших ответов, но они не так просты, как JXcore.

После того, как вы установили JXcore в Windows, все, что вам нужно сделать, это запустить:

jx package app.js "myAppName" -native

В результате будет создан файл .exe, который вы можете распространять и который можно выполнять без каких-либо внешних зависимостей (вам даже не нужны ни JXcore, ни Node.js в системе).

Вот документация по этой функциональности: http://jxcore.com/packaging-code-protection/#cat-74

Изменить 2018

Этот проект сейчас мертв, но он все еще находится здесь: https://github.com/jxcore/jxcore-release (спасибо @Elmue)

Ответ 8

Не пробовал, но nexe выглядит как nexe, это можно сделать:

https://github.com/crcn/nexe

Ответ 9

Я рекомендую вам BoxedApp для этого. Это коммерческий продукт, который работает очень хорошо. Он работает для любого приложения NodeJS. Конечный пользователь получит только один EXE файл для вашего приложения. Нет необходимости в установке.

В Electron, например, конечный пользователь должен установить/распаковать приложение, и он увидит все исходные файлы вашего кода.

BoxedApp Он упаковывает все файлы и зависимости, которые требуется вашему приложению NodeJS. Он поддерживает сжатие, а скомпилированный файл работает в Windows XP +

Когда вы используете его, обязательно добавьте Node.EXE в скомпилированное приложение. Выберите версию node, которая поддерживает Windows XP (если вам это нужно)

Программа поддерживает аргументы командной строки, поэтому после пакета вы можете сделать

c:\myApp argument1

И вы можете получить аргумент в коде node:

process.argv[1]

Иногда ваше приложение имеет зависимости от файлов, поэтому в BoxedApp вы можете добавить любую папку и файл в качестве зависимости, например, вы можете вставить файл настроек.

var mySettings=require('fs').readFileSync('./settings.jgon').toString()

Дополнительная информация:

Просто примечание: обычно я рекомендую бесплатное программное обеспечение с открытым исходным кодом/бесплатно, но в этом случае я не нашел ничего, что выполнит эту работу.

Ответ 11

Я нашел, что любое из этих решений удовлетворяет моим требованиям, поэтому сделала свою собственную версию node, называемую node2exe, которая делает это. Он доступен из https://github.com/areve/node2exe

Ответ 12

Попробуйте disclose: https://github.com/pmq20/disclose

disclose по существу делает самораспаковывающийся exe из вашего проекта Node.js и Node.js-интерпретатор со следующими характеристиками:

  • Нет графического интерфейса. Чистый CLI.
  • Нет зависимостей во время выполнения
  • Поддерживает как Windows, так и Unix
  • Выполняется медленно в первый раз (извлечение в каталог кеша), затем быстро навсегда

Попробуйте node-compiler: https://github.com/pmq20/node-compiler

Я создал новый проект под названием node-compiler, чтобы скомпилировать ваш проект Node.js в один исполняемый файл.

Это лучше, чем disclose, поскольку он никогда не запускается медленно в первый раз, поскольку ваш исходный код скомпилирован вместе с Node.js-интерпретатором, как и стандартные библиотеки Node.js.

Кроме того, он перенаправляет запросы файлов и каталогов прозрачно в память, а не в файловую систему во время выполнения. Поэтому для запуска скомпилированного продукта не требуется исходный код.

Как это работает: https://speakerdeck.com/pmq20/node-dot-js-compiler-compiling-your-node-dot-js-application-into-a-single-executable

Сравнение с аналогичными проектами,

  • pkg (https://github.com/zeit/pkg): Pkg взломал fs. * API динамически, чтобы получить доступ к файлам внутри пакета, тогда как Node.js Компилятор оставляет их в покое и вместо этого работает на более глубоком уровне через libsquash. Pkg использует JSON для хранения файлов внутри пакета, а Node.js. Компилятор использует более сложную и широко используемую SquashFS в качестве своей структуры данных.

  • EncloseJS (http://enclosejs.com/): EncloseJS ограничивает доступ к файлам in-package только к пяти fs. * API, тогда как Node.js Компилятор поддерживает все fs. * API. EncloseJS является собственностью лицензированных и берет деньги при использовании в то время как Node.js Компилятор лицензирован MIT, и пользователи могут свободно его использовать и свободно изменять.

  • Nexe (https://github.com/nexe/nexe): Nexe не поддерживает динамическое требование из-за использования браузера, тогда как Node.js Компилятор поддерживает все виды запросов, включая require.resolve.

https://github.com/electron/asar): Asar использует JSON для хранения информации о файлах, а Node.js Компилятор использует SquashFS, Asar хранит архив кода и исполняемый файл отдельно, а Node.js Компилятор связывает весь исходный код JavaScript вместе с виртуальной машиной Node.js и генерирует один исполняемый файл в качестве конечного продукта.

AppImage (http://appimage.org/): AppImage поддерживает только Linux с ядром, которое поддерживает SquashFS, а Node.js Компилятор поддерживает все три платформы Linux, macOS и Windows, между тем без каких-либо особых требований к функциям ядра.

Ответ 13

Надоело начинать с выигрыша из командной строки, тогда я тоже натолкнулся на это. Немного улучшенная версия. над чем josh3736. Для использования нескольких параметров используется XML файл. Например, путь к Node.exe, а также файл, который будет запущен по умолчанию app.js. Кроме того, среда для загрузки (производство, dev и т.д.), Которую вы указали в своем приложении app.js(или server.js, или как вы его называли). По существу он добавляет NODE_ENV={0}, где {0} - это имя вашей конфигурации в app.js как var для вас. Вы делаете это, изменяя элемент "mode" в файле config.xml. Вы можете захватить проект здесь == > github. Обратите внимание, что в событиях Post Build вы можете изменить пути копирования для автоматической копирования через ваш config.xml и исполняемый файл в ваш каталог Nodejs, чтобы сохранить шаг. В противном случае отредактируйте их, или ваша сборка выведет предупреждение.

var startInfo = new ProcessStartInfo();
        startInfo.FileName = nodepath;
        startInfo.Arguments = apppath;
        startInfo.UseShellExecute = false;
        startInfo.CreateNoWindow = false;
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;

        if(env.Length > 0)
            startInfo.EnvironmentVariables.Add("NODE_ENV", env);

        try
        {
            using (Process p = Process.Start(startInfo))
            {
                p.WaitForExit();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString(), "Start Error", MessageBoxButtons.OK);
        }

Ответ 14

Может быть много других вариантов, но, насколько мне известно, в GitHub есть один проект в активной разработке https://github.com/zeit/pkg. Вы можете играть с ним. Еще один из https://github.com/nexe/nexe, но не в активном развитии.

Ответ 15

Я изучал эту тему в течение нескольких дней, и вот что я нашел. Параметры делятся на две категории:

Если вы хотите создать настольное приложение, лучшие варианты:

1- NW.js: позволяет вам вызывать все модули Node.js непосредственно из DOM и позволяет использовать новый способ написания приложений со всеми веб-технологиями.

2- Electron: создавать приложения для кросс-платформенных настольных приложений с помощью JavaScript, HTML и CSS

Вот хорошее сравнение между ними: NW.js и Electron Comparared. Я думаю, что NW.js лучше, и он также предоставляет приложение для компиляции JS файлов. Существуют также отдельные автономные исполняемые и установщики, такие как Enigma Virtual Box. Они оба содержат встроенную версию Chrome, которая не нужна для серверных приложений.

, если вы хотите упаковать серверное приложение, это лучшие варианты:

node-compiler: Компилятор AOS (AOS), разработанный для Node.js, просто работает.

Nexe: создать один исполняемый файл из ваших приложений Node.js

В этой категории, я считаю, node -компилятор лучше, который поддерживает динамические требования и собственные node модули. Он очень прост в использовании, и выход начинается с 25 МБ. Вы можете прочитать полное сравнение с другими решениями на странице node Компилятор. Я не много читал о Nexe, но пока, кажется, node Компилятор не компилирует js файл в двоичный формат с использованием функции моментального снимка V8, но он запланирован для версии 2. Он также будет иметь встроенный установщик установщика.

Ответ 16

Попробуйте nexe, который создает один исполняемый файл из ваших приложений node.js

https://github.com/nexe/nexe

Ответ 17

Существует проект с открытым исходным кодом, который называется nodebob. Я предполагаю, что окна рабочей платформы,

  • просто клонировать или загружать проект
  • скопируйте все node -webkit файлы проекта в папку приложения.
  • запустите build.bat script.

Вы найдете исполняемый файл внутри папки выпуска.