Tengo una aplicación de nodo que escribí, que ejecuto de la siguiente manera:
node.exe app.js inputArg
¿Hay alguna forma de que pueda empaquetar esto en un .exe por sí mismo? ¿Entonces puedo hacer algo como esto?
App.exe inputArg
Tengo alguna forma de fingir esto usando un archivo por lotes, así que puedo hacer esto:
App.bat inputArg
Pero esto requiere que tenga todas las dependencias y el nodo en esa carpeta, lo cual no es ideal.
javascript
windows
node.js
exe
Aishwar
fuente
fuente
Respuestas:
Existen algunas alternativas, tanto gratuitas como comerciales. No he usado ninguno de ellos, pero en teoría deberían funcionar:
La mayoría requerirá que mantenga el archivo por lotes como ejecutable principal y luego agrupe node.exe y sus scripts.
Dependiendo de su secuencia de comandos, también tiene la opción de migrarlo a JSDB , que admite una forma fácil de crear ejecutables simplemente agregando recursos.
Una tercera cuasi-solución es mantener el nodo en algún lugar como
C:\utils
y agregar esta carpeta a suPATH
variable de entorno. Luego, puede crear archivos .bat en ese directorio que ejecutan el nodo + sus scripts preferidos: tengo coffeescriptcoffee
funcionando en Windows de esta manera. Esta configuración se puede automatizar con un archivo por lotes, un script vb o un instalador.fuente
La solución que he usado es el node-webkit de Roger Wang .
Esta es una forma fantástica de empaquetar aplicaciones de nodejs y distribuirlas, incluso te da la opción de "empaquetar" toda la aplicación como un solo ejecutable. Es compatible con Windows, Mac y Linux.
Aquí hay algunos documentos sobre las diversas opciones para implementar aplicaciones de node-webkit, pero en pocas palabras, haga lo siguiente:
Solo como una nota adicional: he enviado varias aplicaciones de CD de instalación / caja de producción utilizando esto, y funcionó muy bien. La misma aplicación se ejecuta en Windows, Mac, Linux y en la web.
Actualización: el nombre del proyecto ha cambiado a 'nw.js' y está ubicado correctamente aquí: nw.js
fuente
Para cualquiera que se encuentre con esta pregunta, ahora hay dos proyectos que crean exes a partir de sus proyectos de nodo, Pkg y Electron.atom.io , difieren ligeramente:
El ejecutable resultante es SOLAMENTE Windows (.exe).Todas las plataformas son compatibles ahora.Ahora requiere una licencia para productos comerciales.Código completamente abierto.fuente
De forma predeterminada, Windows asocia
.js
archivos con Windows Script Host , el motor de tiempo de ejecución JS independiente de Microsoft. Si escribe script.js en un símbolo del sistema (o hace doble clic en un.js
archivo en el Explorador), el script es ejecutado porwscript.exe
.Esto puede estar resolviendo un problema local con una configuración global , pero podría asociar
.js
archivos con en sunode.exe
lugar, de modo que escribir script.js en un símbolo del sistema o hacer doble clic / arrastrar elementos a los scripts los lanzará con Node.Por supuesto, si, como yo, ha asociado
.js
archivos con un editor para que al hacer doble clic en ellos se abra su editor de texto favorito, esta sugerencia no servirá de mucho. También puede agregar una entrada de menú del botón derecho de "Ejecutar con nodo" a los.js
archivos, aunque esta alternativa no resuelve sus necesidades de línea de comandos.La solución más simple probablemente sea usar un archivo por lotes; no es necesario que tenga una copia de Node en la carpeta en la que reside su script. Simplemente haga referencia al ejecutable de Node absolutamente:
Otra alternativa es esta aplicación C # muy simple que iniciará Node usando su propio nombre de archivo +
.js
como el script a ejecutar, y pasará cualquier argumento de línea de comando.Entonces, si nombra el EXE resultante "app.exe", puede escribir
app arg1 ...
y Node se iniciará con la línea de comando"app.js" arg1 ...
. Tenga en cuenta que la aplicación de arranque de C # se cerrará inmediatamente, dejando a Node a cargo de la ventana de la consola.Dado que esto probablemente sea de un interés relativamente amplio, seguí adelante y lo puse a disposición en GitHub , incluido el exe compilado si lo tuyo es entrar en furgonetas con extraños.
fuente
La mejor herramienta que conozco es la herramienta NodeJS: zeit / pkg
Es muy fácil de usar (mucho más que Nexe, solo como ejemplo), puedes instalarlo globalmente:
npm install -g pkg
para crear ejecutables para macOS, Linux y Windows:
pkg exampleApp.js
Tenía un código un poco complicado que usaba el servidor de socket NodeJS, probé diferentes aplicaciones, ninguna de ellas lo creó correctamente, excepto zeit / pkg .
fuente
No lo he probado, pero parece que nexe puede hacer esto:
https://github.com/crcn/nexe
fuente
Desde que se respondió a esta pregunta, se ha lanzado otra solución.
https://github.com/appjs/appjs
En el momento de escribir este artículo, esta es la solución definitiva para empaquetar aplicaciones node.js a través de un paquete de chrome reducido compilado en un ejecutable.
Editar: AppJS ya no está activo, pero sugiere una bifurcación llamada deskshell.
https://github.com/sihorton/appjs-deskshell/
fuente
Aquí hay muchas buenas respuestas, pero no todas son tan sencillas como JXcore .
Una vez que tenga JXcore instalado en Windows, todo lo que tiene que hacer es ejecutar:
Esto producirá un archivo .exe que puede distribuir y puede ejecutarse sin ninguna dependencia externa (ni siquiera necesita JXcore ni Node.js en el sistema).
Aquí está la documentación sobre esa funcionalidad: http://jxcore.com/packaging-code-protection/#cat-74
Editar 2018
Ese proyecto ahora está muerto, pero todavía está alojado aquí: https://github.com/jxcore/jxcore-release (gracias @Elmue)
fuente
Pruebadisclose
: https://github.com/pmq20/disclosedisclose
esencialmente hace un archivo ejecutable autoextraíble de su proyecto Node.js y del intérprete Node.js con las siguientes características,Sin GUI. CLI puro.Sin dependencias en tiempo de ejecuciónSoporta Windows y UnixSe ejecuta lentamente por primera vez (extrayendo a un directorio de caché), luego rápido para siemprePrueba
node-compiler
: https://github.com/pmq20/node-compilerHe creado un nuevo proyecto llamado
node-compiler
para compilar su proyecto Node.js en un solo ejecutable.Es mejor que
disclose
nunca se ejecuta lentamente por primera vez, ya que su código fuente se compila junto con el intérprete de Node.js, al igual que las bibliotecas estándar de Node.js.Además, redirige las solicitudes de archivos y directorios de forma transparente a la memoria en lugar de al sistema de archivos en tiempo de ejecución. De modo que no se requiere código fuente para ejecutar el producto compilado.
Cómo funciona: https://speakerdeck.com/pmq20/node-dot-js-compiler-compiling-your-node-dot-js-application-into-a-single-executable
Comparando con proyectos similares,
pkg ( https://github.com/zeit/pkg ): Pkg pirateó fs. * API dinámicamente para acceder a los archivos del paquete, mientras que el compilador Node.js los deja solos y, en cambio, trabaja en un nivel más profundo a través de libsquash. Pkg usa JSON para almacenar archivos en el paquete, mientras que Node.js Compiler usa SquashFS más sofisticado y ampliamente utilizado como su estructura de datos.
EncloseJS ( http://enclosejs.com/ ): EncloseJS restringe el acceso a los archivos del paquete a solo cinco API fs. *, Mientras que el compilador Node.js admite todas las API fs. *. EncloseJS tiene licencia patentada y cobra dinero cuando se usa, mientras que el compilador Node.js tiene licencia MIT y los usuarios son libres de usarlo y de modificarlo.
Nexe ( https://github.com/nexe/nexe ): Nexe no admite el requerimiento dinámico debido a su uso de browserify, mientras que el compilador Node.js admite todo tipo de requerimiento, incluido require.resolve.
asar ( https://github.com/electron/asar ): Asar usa JSON para almacenar información de archivos mientras que el compilador Node.js usa SquashFS. Asar mantiene el archivo de código y el ejecutable por separado, mientras que el compilador Node.js vincula todo el código fuente de JavaScript junto con la máquina virtual Node.js y genera un solo ejecutable como producto final.
AppImage ( http://appimage.org/ ): AppImage solo es compatible con Linux con un kernel que admita SquashFS, mientras que Node.js Compiler es compatible con las tres plataformas de Linux, macOS y Windows, mientras que sin ningún requisito de características especiales del kernel.
fuente
Te recomiendo BoxedApp para eso. Es un producto comercial que funciona muy bien. Funciona para cualquier aplicación NodeJS. El usuario final obtendrá solo un archivo EXE para su aplicación. No necesita instalación.
En Electron, por ejemplo, el usuario final necesita instalar / descomprimir su aplicación, y verá todos los archivos fuente de su código.
BoxedApp Empaqueta todos los archivos y dependencias que necesita su aplicación NodeJS. Admite compresiones y el archivo compilado funciona en Windows XP +
Cuando lo use, asegúrese de agregar Node.EXE a la aplicación compilada. Elija una versión de nodo que sea compatible con Windows XP (si lo necesita)
El programa admite argumentos de línea de comando, así que después del paquete, puede hacer
Y puede obtener el argumento en su código de nodo:
A veces, su aplicación tiene dependencias de archivos, por lo que en BoxedApp puede agregar cualquier carpeta y archivo como dependencia, por ejemplo, puede insertar un archivo de configuración.
Más información:
fuente
Encontré que alguna de estas soluciones cumplía con mis requisitos, así que hice mi propia versión de nodo llamada node2exe que hace esto. Está disponible en https://github.com/areve/node2exe
fuente
He estado explorando este tema durante algunos días y esto es lo que encontré. Las opciones se dividen en dos categorías:
Si desea crear una aplicación de escritorio, las mejores opciones son:
Aquí hay una buena comparación entre ellos: NW.js y Electron Compared . Creo que NW.js es mejor y también proporciona una aplicación para compilar archivos JS. También hay algunos constructores de instaladores y ejecutables independientes como Enigma Virtual Box . Ambos contienen una versión integrada de Chrome que no es necesaria para las aplicaciones de servidor.
si desea empaquetar una aplicación de servidor, estas son las mejores opciones:
En esta categoría, creo que el compilador de nodos es mejor que admite módulos de nodo nativo y requerimiento dinámico. Es muy fácil de usar y la salida comienza en 25 MB. Puede leer una comparación completa con otras soluciones en la página Node Compiler. No leí mucho sobre Nexe, pero por ahora, parece que Node Compiler no compila el archivo js en formato binario usando la función de instantánea V8, pero está planeado para la versión 2. También va a tener un constructor de instaladores incorporado.
fuente
Electron
no justifica ser una sugerencia válida para la emisión del PO; es un marco de Node completamente diferente.Pruebe nexe, que crea un único ejecutable a partir de sus aplicaciones node.js
https://github.com/nexe/nexe
fuente
Me cansé de comenzar en win desde el símbolo del sistema y luego me encontré con esto también. Versión ligeramente mejorada. sobre lo que josh3736 . Esto usa un archivo XML para tomar algunas configuraciones. Por ejemplo, la ruta
Node.exe
y el archivo para comenzar en el archivo app.js. También el entorno para cargar (producción, desarrollo, etc.) que ha especificado en su app.js (o server.js o como lo llame). Básicamente, agregaNODE_ENV={0}
donde {0} es el nombre de su configuración en app.js como una var para usted. Para ello, modifica el elemento "mode" en config.xml. Puede tomar el proyecto aquí ==> directorio github . Tenga en cuenta que en los eventos de Post Build puede modificar las rutas de copia para copiar automáticamente su config.xml y el ejecutable a suNodejs
, solo para guardar un paso. De lo contrario, edítelos o su compilación arrojará una advertencia.fuente
Puede haber muchas otras opciones, pero que yo sepa, hay un proyecto en desarrollo activo en GitHub https://github.com/zeit/pkg . Puedes jugar con él. Uno más en https://github.com/nexe/nexe pero no en desarrollo activo.
fuente
Existe un proyecto de herramienta de compilación de código abierto llamado nodebob . Supongo que las ventanas de la plataforma de trabajo
Encontrará el archivo ejecutable dentro de la carpeta de lanzamiento.
fuente