it-roy-ru.com

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

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

node.exe app.js inputArg

Есть ли какой-нибудь способ, которым я могу упаковать это в .exe самостоятельно? Так что я могу сделать что-то подобное?

App.exe inputArg

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

App.bat inputArg

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

107
Aishwar

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

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

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

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

30
Ricardo Tomasi

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

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

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

  1. Заархивируйте все ваши файлы с пакетом .json в корне
  2. Измените расширение с .Zip на .nw
  3. copy/b nw.exe + app.nw app.exe

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

47
Clayton Gulick

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

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

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

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

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


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

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

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

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 # будет немедленно закрыто, оставив Node ответственным за окно консоли.

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

22
josh3736

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

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

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

pkg exampleApp.js

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

14
user8376713

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

https://github.com/appjs/appjs

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

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

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

12
bitfed

Здесь много хороших ответов, но они не так просты, как 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)

11
Nepoxx

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

https://github.com/crcn/nexe

11
B T

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

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

  1. Нет графического интерфейса Чистый CLI.
  2. Нет зависимостей во время выполнения
  3. Поддерживает как Windows, так и Unix
  4. Запускается медленно в первый раз (извлекается в каталог кэша), затем быстро навсегда

Попробуйте 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 взломал API fs. * динамически для доступа к файлам в пакете, тогда как Node.js Compiler оставляет их в покое и вместо этого работает на более глубокий уровень с помощью libsquash. Pkg использует JSON для хранения файлов в пакете, в то время как Node.js Compiler использует более сложную и широко используемую SquashFS в качестве своей структуры данных.

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

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

  • asar ( 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 Compiler поддерживает все три платформы Linux, macOS и Windows, при этом без каких-либо специальных требования к характеристикам из ядра.

5
Minqi Pan

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

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

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

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

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

c:\myApp argument1

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

process.argv[1]

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

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

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

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

4
Aminadav Glickshtein

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

3
areve

Надоело начинать с победы из командной строки, а затем я столкнулся с этим. Слегка улучшенная версия за что josh3736 . Это использует файл XML, чтобы получить несколько настроек. Например, путь к Node.exe, а также файл для запуска в стандартном app.js. Кроме того, среда для загрузки (production, dev и т.д.), Которую вы указали в своем app.js (или server.js или как вы его называли). По сути, он добавляет NODE_ENV={0}, где {0} - это имя вашей конфигурации в app.js как переменная для вас. Вы делаете это, изменяя элемент "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);
        }
1
origin1tech

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

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

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

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

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

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

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

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

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

1
Ali

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

https://github.com/nexe/nexe

1
Dhrubo

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

1
Rohit Luthra

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

  1. просто клонировать или скачать проект
  2. скопируйте все свои файлы проекта node-webkit в папку приложения.
  3. запустите скрипт build.bat.

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

0
cagcak