Упакуйте приложение node.js как кроссплатформенный исполняемый файл, а не для настольного приложения.

По этой теме много вопросов, но они, похоже, не различают исполняемые файлы для настольных или серверных приложений. Я полагаю, мой первый вопрос будет: в чем разница? Например, Zeit/pkg говорит, что это «бинарный компилятор node.js», тогда как nwjs (ранее node-webkit) говорит, что это «среда выполнения приложений, основанная на Chromium и node.js».

Я попробовал zeit/pkg, и он отлично работает, но читал, что могут быть проблемы с производительностью если он не настроен должным образом. Я хотел убедиться, что выбираю правильный инструмент, и наткнулся на nwjs. Похоже, что он делает то же самое, что и pkg, но у него больше поклонников, а также больше документации и надежный API. Могу ли я использовать nwjs в качестве исполняемого файла на стороне сервера (т. е. без использования функции рабочего стола) так же, как я использовал бы pkg?

В этом ответе говорится, что nwjs "является вариантом, но на самом деле он не настроен для выполнения типа "сервер-клиент". отношения», но затем в комментарии говорится: «Вы можете запустить сервер из node-webkit точно так же, как вы запускаете его в Node.js. Просто node-webkit предоставляет другой путь, выходящий за рамки архитектуры B/S».

Итак, является ли nwjs таким же, как pkg, или принципиально другим?

Я понимаю, что есть также Electron, в котором говорится «создавать кроссплатформенные настольные приложения» и он похож на nwjs. Я не пытаюсь вступать в дебаты об Electron и nwjs, а скорее о настольных компьютерах и серверах, если есть разница.


person Andrew    schedule 22.02.2018    source источник


Ответы (1)


вы уже получили большую часть вещей, необходимо лишь несколько уточнений. Причина, по которой nw.js/Electron заявляет о себе как о настольном приложении, заключается в том, что его основной архитектурный дизайн предназначен для интеграции node.js с хромом, чтобы пользовательский интерфейс позволял создавать приложения с пользовательским интерфейсом. Вы по-прежнему можете использовать часть этих фреймворков (сторона node.js) без запуска видимого пользовательского интерфейса, в этом случае поведение будет похоже на обычный node.js. Тем не менее, есть предостережение, например, поскольку он уже тесно интегрирован с хромом в ядре, в некоторых случаях у вас должен быть экран для правильного запуска хрома (или создания виртуального буфера, как это делает много CI, или и т. д.).

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

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

person OJ Kwon    schedule 22.02.2018
comment
Спасибо за информацию. Я хочу упаковать его так, чтобы клиенту не нужно было устанавливать nodejs, поэтому я использую pkg (просто щелкните .exe). Кроме того, существует защита исходного кода, поскольку он двоичный. Мне любопытно, что ваш комментарий упаковывает его как устанавливаемый способ - у вас есть ссылки на это? Является ли это предпочтительной методологией, чем pkg? - person Andrew; 23.02.2018
comment
существует огромное количество ресурсов вокруг простого старого установщика. Вы также можете внутренне установить nodejs через этот установщик, а затем установить соответствующий модуль. Наконец, нет ничего похожего на code protection — независимо от того, как вы его упаковываете, код читабелен. - person OJ Kwon; 23.02.2018