pkg node encrypt code javascript windows node.js exe

javascript - node - npm pkg



¿Cómo hacer archivos exe desde una aplicación node.js? (17)

Para cualquiera que se tropiece con esta pregunta, ahora hay dos proyectos que crean expansiones de sus proyectos de nodo, EncloseJS y Electron.atom.io , difieren ligeramente:

  1. EncloseJS compilará su proyecto con código nativo, también incluyen activos Y una instalación nodejs (el sistema no necesitará instalar nodejs para ejecutar el .exe). Su código fuente no será incluido. El ejecutable resultante es SOLAMENTE Windows (.exe). Todas las plataformas son compatibles ahora. Ahora requiere una licencia para productos comerciales.
  2. Electron.atom.io aunque no se compacte y genere un .exe para usted, PUEDE usarse para distribuir aplicaciones nodejs ya que ofrecen una forma de distribuir aplicaciones . Los beneficios son que el electrón es multiplataforma (windows, mac osx, linux), los inconvenientes son que se incluirá su código fuente, incluso si ofrecen una forma de distribuir su aplicación dentro de un archivo asar . No será a prueba de balas, pero aún así es mejor que tu fuente.

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 una forma de simular 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.


Aquí hay muchas buenas respuestas, pero no todas son tan sencillas como JXcore .

Una vez que tienes JXcore instalado en Windows, todo lo que tienes que hacer es ejecutar:

jx package app.js "myAppName" -native

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 aún está alojado aquí: https://github.com/jxcore/jxcore-release (gracias @Elmue)


Dado que esta pregunta ha sido respondida, se ha lanzado otra solución.

https://github.com/appjs/appjs

En el momento de escribir esto, esta es la solución final para empaquetar las aplicaciones node.js a través de un paquete de cromo simplificado compilado en un archivo ejecutable.

Editar: AppJS ya no está activo, pero sugiere un tenedor llamado caparazón.

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


De forma predeterminada, Windows asocia archivos .js con Windows Script Host , el motor de tiempo de ejecución JS independiente de Microsoft. Si escribe script.js en el símbolo del sistema (o hace doble clic en un archivo .js en el Explorador), wscript.exe ejecuta el wscript.exe .

Esto puede estar solucionando un problema local con una configuración global , pero podría associate archivos .js con node.exe en node.exe lugar, de modo que al escribir script.js en un símbolo del sistema o al hacer doble clic / arrastrar elementos a las secuencias de comandos se ejecutarán con Nodo.

Por supuesto, si, como yo, ha asociado archivos .js con un editor para que al hacer doble clic en ellos abra su editor de texto favorito, esta sugerencia no servirá de mucho. También puede agregar una entrada de menú de "Ejecutar con nodo" al archivo .js , aunque esta alternativa no resuelve sus necesidades de línea de comandos.

La solución más simple es, probablemente, simplemente usar un archivo de proceso por lotes; no es necesario que tenga una copia de Node en la carpeta donde reside el script. Simplemente haga referencia al ejecutable de Node por completo:

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

Otra alternativa es esta aplicación C # muy simple que iniciará Nodo usando su propio nombre de archivo + .js como la secuencia de comandos para ejecutar, y pasará los argumentos de línea de comando.

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); } }

Entonces, si nombra el EXE resultante "app.exe", puede escribir la app arg1 ... y el Nodo se iniciará con la línea de comando "app.js" arg1 ... Tenga en cuenta que la aplicación C # bootstrapper saldrá inmediatamente, dejando a Node a cargo de la ventana de la consola.

Dado que esto es probablemente de interés relativamente amplio, seguí adelante y lo hice disponible en GitHub , incluido el exe compilado si entrar en furgonetas con extraños es lo tuyo.


Encontré que cualquiera de estas soluciones cumplía con mis requisitos, por lo que hice mi propia versión del nodo llamado node2exe que hace esto. Está disponible desde https://github.com/areve/node2exe


Hay algunas alternativas, tanto gratuitas como comerciales. No he usado ninguno de ellos, pero en teoría deberían funcionar:

La mayoría requerirá que guarde 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 portarlo a JSDB , que es compatible con una forma fácil de crear ejecutables simplemente agregando recursos a la misma.

Una tercera cuasi-solución es mantener el nodo en algún lugar como C:/utils y agregar esta carpeta a la PATH entorno PATH . Luego puede crear archivos .bat en ese directorio que ejecute el nodo + sus scripts preferidos: obtuve el coffee coffeescript trabajando en Windows de esta manera. Esta configuración se puede automatizar con un archivo por lotes, script vb o instalador.


Hay un proyecto de herramienta de compilación de código abierto llamado nodebob . Supongo que las ventanas de la plataforma de trabajo,

  1. simplemente clonar o descargar proyecto
  2. copie todos los archivos del proyecto node-webkit en la carpeta de la aplicación.
  3. ejecuta el script build.bat.

Encontrará el archivo ejecutable dentro de la carpeta de lanzamiento.


He estado explorando este tema durante algunos días y aquí está lo que encontré. Las opciones se dividen en dos categorías:

Si desea construir una aplicación de escritorio, las mejores opciones son:

1- NW.js : le permite llamar a todos los módulos de Node.js directamente desde DOM y permite una nueva forma de escribir aplicaciones con todas las tecnologías web.

2- Electron : crea aplicaciones de escritorio multiplataforma con JavaScript, HTML y CSS

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 ejecutables e instaladores independientes como Enigma Virtual Box . Ambos contienen una versión incrustada de Chrome que no es necesaria para aplicaciones de servidor.

Si desea empaquetar una aplicación de servidor, estas son las mejores opciones:

https://github.com/pmq20/node-compiler : https://github.com/pmq20/node-compiler adelanto de tiempo (AOT) diseñado para Node.js, que simplemente funciona.

https://github.com/nexe/nexe : crea un solo ejecutable de tus aplicaciones node.js

En esta categoría, creo que el compilador de nodos es mejor, ya que admite módulos de nodos nativos y de requisitos dinámicos. 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 Compilador de nodos. No leí mucho sobre Nexe, pero por ahora, parece que Node Compiler no compila el archivo js en formato binario utilizando la función de instantáneas V8, pero está planificado para la versión 2. También tendrá un constructor de instalador incorporado.


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 complicado que usaba el servidor de socket NodeJS, probé diferentes aplicaciones, ninguna lo creó correctamente, excepto zeit / pkg .


La solución que he usado es el node-webkit Roger Wang.

Esta es una manera fantástica de empaquetar las aplicaciones de nodejs y distribuirlas, incluso le da la opción de "agrupar" toda la aplicación como un único ejecutable. Es compatible con Windows, Mac y Linux.

Here hay algunos documentos sobre las diversas opciones para implementar aplicaciones de nodo-webkit, pero en pocas palabras, usted hace lo siguiente:

  1. Comprime todos tus archivos con un paquete. Json en la raíz
  2. Cambiar la extensión de .zip a .nw
  3. copy / b nw.exe + app.nw app.exe

Solo como una nota adicional: he enviado varias cajas de producción / aplicaciones de CD de instalación usando esto, y funcionó muy bien. La misma aplicación se ejecuta en Windows, Mac, Linux y en la web.


Me cansé de comenzar a ganar desde el símbolo del sistema y luego me encontré con esto también. Ligeramente mejorado ver. sobre lo que josh3736 . Esto usa un archivo XML para obtener algunas configuraciones. Por ejemplo, la ruta a Node.exe , así como el archivo para iniciar en la aplicación predeterminada.js. También el entorno para cargar (producción, desarrollador, etc.) que ha especificado en su app.js (o server.js o como lo llame). Esencialmente agrega NODE_ENV={0} donde {0} es el nombre de su configuración en app.js como una var para usted. Para ello, modifique el elemento "modo" en config.xml. Puede tomar el proyecto aquí ==> github . Tenga en cuenta que en los eventos de Post Build puede modificar las rutas de copia para copiar automáticamente sobre su config.xml y el ejecutable en su directorio Nodejs , solo para guardar un paso. De lo contrario, edítalos o tu compilación arrojará una advertencia.

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); }




Puede haber muchas otras opciones, pero que yo sepa, hay un proyecto en desarrollo activo en GitHub zeit/pkg . Puedes jugar con eso Una más en https://github.com/nexe/nexe pero no en desarrollo activo.


Te estoy recomendando 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. Sin necesidad de 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 Está empaquetando todos los archivos y dependencias que su aplicación NodeJS necesita. 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 admita Windows XP (si lo necesita)

El programa es compatible con los argumentos de la línea de comandos, por lo tanto, después del paquete, puede hacer

c:/myApp argument1

Y puede obtener el argumento en su código de nodo:

process.argv[1]

A veces, su aplicación tiene dependencias de archivos, por lo que en BoxedApp puede agregar cualquier carpeta y archivo como una dependencia, por ejemplo, puede insertar un archivo de configuración.

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

Más información:

Solo una nota: por lo general, estoy recomendando software libre / de código abierto, pero en este caso no encontré nada que haga el trabajo.



Intente disclose : https://github.com/pmq20/disclose

disclose esencialmente hace un exe autoextraíble de su proyecto Node.js y del intérprete Node.js con las siguientes características,

  1. Sin GUI. CLI puro.
  2. Sin dependencias de tiempo de ejecución
  3. Admite Windows y Unix
  4. Se ejecuta lentamente por primera vez (extrayendo a un directorio de caché), luego rápido para siempre

Pruebe node-compiler : https://github.com/pmq20/node-compiler

Hice un nuevo proyecto llamado node-compiler para compilar su proyecto Node.js en un único ejecutable.

Es mejor que disclose que nunca se ejecuta lentamente por primera vez, ya que su código fuente se compila junto con el intérprete Node.js, al igual que las bibliotecas estándar 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 un 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 ( zeit/pkg ): Pkg hackeado fs. * API dinámicamente para acceder a los archivos dentro del paquete, mientras que el compilador Node.js los deja solos y en su lugar funciona en un nivel más profundo a través de libsquash. Pkg utiliza JSON para almacenar archivos dentro del paquete, mientras que el compilador Node.js utiliza el SquashFS más sofisticado y ampliamente utilizado como estructura de datos.

  • EncloseJS ( EncloseJS ): EncloseJS restringe el acceso a los archivos del paquete a solo cinco fs. * API, mientras que el compilador Node.js admite todos los fs. * API. EncloseJS tiene licencia propietaria y cobra dinero cuando se usa mientras el compilador Node.js tiene licencia de MIT y los usuarios son libres de usarlo y de modificarlo libremente.

  • Nexe ( https://github.com/nexe/nexe ): Nexe no es compatible con dynamic require debido a su uso de browserify, mientras que el compilador Node.js admite todo tipo de requisitos, incluido require.resolve.

  • asar ( https://github.com/electron/asar ): Asar usa JSON para almacenar información de archivos mientras el compilador Node.js usa SquashFS. Asar mantiene separados el archivo de código y el ejecutable, 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 admite Linux con un kernel que admite SquashFS, mientras que Node.js Compiler admite las tres plataformas de Linux, macOS y Windows, mientras tanto, sin ningún requisito de funciones especiales del kernel.