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

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

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

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

Итак, nwjs - это то же самое, что и pkg, или принципиально другой?

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам