Cómo puedo implementar Nodo.aplicaciones js como un único archivo ejecutable? [duplicar]


Esta pregunta ya tiene una respuesta aquí:

Se supone que he escrito un Nodo.aplicación js, y ahora me gustaría distribuirla. Por supuesto, quiero hacerlo fácil para el usuario, por lo tanto, no quiero que instale Node.js, ejecute npm install y luego escriba manualmente node app.js.

¿Qué Preferiría que fuera un único archivo ejecutable, por ejemplo, un archivo .exe en Windows.

¿Cómo podría abordar esto?

Soy consciente de este hilo, de todos modos esto es solo sobre Windows. ¿Cómo podría lograr esto de una manera independiente de la plataforma? Alguna idea? Las mejores prácticas? ...?

La solución perfecta fue un "compilador" al que puedo darle una carpeta de origen. La carpeta de origen contiene la propia aplicación en varios archivos .js, la carpeta node_modules y algunos metadatos, como package.json. Salida deben ser binarios para varias plataformas, como Windows, OS X y Linux.

Ah, y lo que es importante: No quiero hacer ningún cambio en el código fuente, por lo que las llamadas a require con rutas relativas deberían seguir funcionando, incluso si esta ruta relativa está ahora dentro de la aplicación empaquetada.

¿Alguna idea?

PD: No quiero que el usuario instale el nodo.js independientemente, debe ser incluido dentro del ejecutable también.

Author: Community, 2013-01-14

8 answers

Mientras tanto he encontrado la (para mí) solución perfecta: nexe, que crea un solo ejecutable a partir de un nodo.aplicación js incluyendo todos sus módulos.

Aunque por el momento tiene algunas desventajas (no se ejecuta en Windows y no admite módulos binarios), es lo mejor que una solución ideal.

 52
Author: Golo Roden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-09 16:36:51

Primero, estamos hablando de empaquetar un nodo.js app para talleres, demos, etc. donde puede ser útil tener una aplicación "simplemente ejecutándose" sin la necesidad de que el usuario final se preocupe por la instalación y las dependencias.

Puede probar la siguiente configuración:

  1. Obtenga el código fuente de sus aplicaciones
  2. npm install todas las dependencias (vía paquete.json) al directorio local node_modules. Es importante realizar este paso en cada plataforma que desea apoyar por separado, en caso de de dependencias binarias.
  3. Copie el nodo.nodo js binary – .exe en Windows, (probablemente) /usr/local/bin/node en OS X/Linux a la carpeta raíz de su proyecto. En OS X / Linux puede encontrar la ubicación del nodo.js binario con which node.

Para Windows:
Crear un archivo autoextraíble, 7zip_extra admite una forma de ejecutar un comando justo después de la extracción, consulte: http://www.msfn.org/board/topic/39048-how-to-make-a-7-zip-switchless-installer/.

Para OS X / Linux:
Puedes usar herramientas como makeselfo unzipsfx (no se si está compilado con CHEAP_SFX_AUTORUN definido por defecto).

Estas herramientas extraerán el archivo a un directorio temporal, ejecutarán el comando dado (por ejemplo, node app.js) y eliminarán todos los archivos cuando terminen.

 30
Author: Frederic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-29 19:49:36

No es para ganarle a un caballo muerto, pero la solución que estás describiendo se parece mucho a Node-Webkit.

Desde la página de Git:

Node-webkit es un tiempo de ejecución de aplicación basado en Chromium y node.js. Puede escribir aplicaciones nativas en HTML y JavaScript con node-webkit. También le permite llamar a Node.js modula directamente desde el DOM y permite una nueva forma de escribir aplicaciones nativas con todas las tecnologías Web.

Estas instrucciones detallan específicamente la creación de una aplicación de un solo archivo que un usuario puede ejecutar, y esta parte describe las dependencias externas.

No estoy seguro de si es la solución exacta, pero parece bastante cerca.

Espero que ayude!

 15
Author: Jason Nichols,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-23 21:59:38

JXcore le permitirá convertir cualquier aplicación nodejs en un solo ejecutable, incluidas todas las dependencias, en Windows, Linux o Mac OS X.

Aquí hay un enlace al instalador: https://github.com/jxcore/jxcore-release

Y aquí hay un enlace a cómo configurarlo: http://jxcore.com/turn-node-applications-into-executables /

Es muy fácil de usar y lo he probado tanto en Windows 8.1 como en Ubuntu 14.04.

FYI: JXcore es una bifurcación de NodeJS por lo que es 100% compatible con NodeJS, con algunas características adicionales.

 8
Author: Ian Tait,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-05 01:47:38

Además de nexe, browserify se puede usar para agrupar todas sus dependencias como un único archivo .js. Esto no empaqueta el ejecutable del nodo real, solo maneja el lado javascript. Tampoco maneja módulos nativos. Las opciones de la línea de comandos para la compilación de nodos puros serían browserify --output bundle.js --bare --dg false input.js.

 6
Author: Nakedible,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-15 19:03:38

Hay una serie de pasos que debe seguir para crear un instalador y varía para cada sistema Operativo. Por Ejemplo:

 5
Author: CoolAJ86,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-22 01:49:27

Intenté usar makeself y tuve éxito. no hay problemas todavía. pasos documentados@https://www.linkedin.com/pulse/article/deploying-nodejs-single-executableruntime-amit-gupta

 1
Author: Amit Gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-26 05:42:05

Puede crear un repositorio de git y configurar un enlace al nodo repositorio de git como dependencia. Entonces cualquier usuario que clone el repositorio también podría instalar node.

#git submodule [--quiet] add [-b branch] [-f|--force]
git submodule add /var/Node-repo.git common

Puede empaquetar fácilmente un script para clonar automáticamente el repositorio git que ha alojado en algún lugar e "instalar" desde uno de esos archivos de script.

#!/bin/sh
#clone git repo
git clone your-repo.git
 0
Author: HarrisonJackson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-17 04:14:28