Ejecutando JavaScript sin un navegador?


Estoy buscando en la programación Javascript sin un navegador. Quiero ejecutar scripts desde la línea de comandos de Linux o Mac OS X, al igual que ejecutamos cualquier otro lenguaje de scripting (ruby, php, perl, python...)

$ javascript my_javascript_code.js

Miré en spider monkey (Mozilla) y v8 (Google), pero ambos parecen estar incrustados.

¿Alguien está usando Javascript como lenguaje de scripting para ser ejecutado desde la línea de comandos?

Si alguien tiene curiosidad por qué estoy investigando esto, he sido hurgando alrededor del nodo .js . El rendimiento del nodo.js me hace preguntarme si javascript puede ser un lenguaje de scripting viable para procesar grandes datos.

Author: 太極者無極而生, 2010-05-31

13 answers

Encontré esta pregunta relacionada sobre el tema, pero si quieres enlaces directos, aquí están:

  • puede instalar Rhino como otros han señalado. Este post muestra una manera fácil de ponerlo en marcha y cómo alias un comando para invocarlo fácilmente
  • Si estás en un Mac, puedes usar JavaScriptCore, que invoca el motor JavaScript de WebKit. Aquí hay un post en él
  • También puedes usar el intérprete V8 de Chome/Google. Aquí están instrucciones
  • El JavaScript como OSA es interesante porque te permite (AFAIK) interactuar con aplicaciones de OS X con scripts como si estuvieras en AppleScript (sin la terrible sintaxis)

Estoy sorprendido nodo.js no viene con un shell, pero supongo que es realmente más como un servidor web basado en epoll/selector de devolución de llamada/orientado a eventos, por lo que tal vez no necesita el conjunto completo de características de JS, pero no estoy muy familiarizado con su funcionamiento interno.

Ya que parece interesado en nodo.js y ya que está basado en V8, podría ser mejor seguir esas instrucciones para obtener un entorno V8 configurado para que pueda tener una base consistente para su programación JavaScript (espero que JSC y V8 sean casi lo mismo, pero no estoy seguro).

 43
Author: jasonmp85,
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-05-23 12:10:31

Respuesta principal

Sí, para responder a su pregunta, es posible usar JavaScript como un lenguaje de scripting "regular" desde la línea de comandos, sin un navegador. Ya que otros aún no lo han mencionado, veo que vale la pena mencionarlo:

En sistemas basados en Debian (y esto incluye Ubuntu, Linux Mint y aptosid / sidux, al menos), además de las opciones de instalación de Rhino y otras ya mencionadas, tiene otras opciones:

  • Instalar el libmozjs-24-bin paquete, que le proporcionará el motor Spidermonkey de Mozilla en la línea de comandos como un simple js24, que se puede utilizar también como un intérprete interactivo. (El 24 en el nombre significa que corresponde a la versión 24 de Firefox).

  • Instalar el libv8-dev paquete, que le proporcionará el motor V8 de Google. Tiene, como uno de sus ejemplos, el archivo /usr/share/doc/libv8-dev/examples/shell.cc.gz que puedes descomprimir y compilar de forma muy sencilla (por ejemplo,, g++ -Os shell.cc -o shell -lv8).

  • Instalar el paquete nodejs y estará disponible como ejecutable nodejs y como alternativa (en el sentido de Debian) para proporcionar el ejecutable js. La compilación JIT se proporciona como cortesía de V8.

  • Instalar el paquete libjavascriptcoregtk-3.0-bin y utilice el intérprete JavaScriptCore de WebKit (jsc) como intérprete regular desde la línea de comandos. Y esto es sin necesidad de tener acceso a una Mac. En muchas plataformas (por ejemplo, x86 y x86_64), este intérprete vendrá con un compilador JIT.

Por lo tanto, con casi ninguna compilación, tendrá tres de los motores JavaScript de gran peso a su disposición.

Adición

Una vez que tenga las cosas instaladas, simplemente puede crear archivos con la línea #!/usr/bin/js shebang y las cosas simplemente funcionarán:

$ cat foo.js 
#!/usr/bin/js

console.log("Hello, world!");
$ ls -lAF /usr/bin/js /etc/alternatives/js /usr/bin/nodejs
lrwxrwxrwx 1 root root      15 Jul 16 04:26 /etc/alternatives/js -> /usr/bin/nodejs*
lrwxrwxrwx 1 root root      20 Jul 16 04:26 /usr/bin/js -> /etc/alternatives/js*
-rwxr-xr-x 1 root root 1422004 Apr 28 20:31 /usr/bin/nodejs*
$ chmod a+x foo.js 
$ ./foo.js 
Hello, world!
$ js ./foo.js
Hello, world!
$
 54
Author: rbrito,
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-28 02:39:40

He instalado Node.js on an iMac and

node somefile.js

En bash funcionará.

 20
Author: 太極者無極而生,
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
2012-10-01 09:38:06

Sé que preguntaste sobre Linux y Mac; voy a dar la respuesta para Windows, en caso de que otras personas que estén interesadas en Windows encuentren tu pregunta .

Windows incluye un motor Javascript que se puede utilizar desde la línea de comandos.

Todas las versiones de Windows, desde Windows 98, han incluido algo llamado " El Host de Script de Windows". Es una forma estándar de Windows de soportar "motores" de script. Desde la primera versión, WSH soporta JScript, la versión de Microsoft de Javascript. Entre otras cosas, esto significa que, desde una línea de comandos de Windows, solo puede invocar el nombre de cualquier *.js, y se ejecutará en el motor JScript. (vía wscript.exe o cscript.exe)

Puede ver esta pregunta: ¿Qué es el ProgID o CLSID para el motor Javascript de IE9 (llamado en código "Chakra") para aprender a invocar el motor Javascript de IE9 de mayor rendimiento desde cscript?exe.

 10
Author: Cheeso,
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-05-23 12:34:42

Ya que nadie lo mencionó: Desde Java 1.6 el Java JDK también viene incluido con una línea de comandos JavaScript y REPL.

Se basa en Rhino: https://developer.mozilla.org/en/docs/Rhino

En Java 1.6 y 1.7 el comando se llama jrunscript (jrunscript.exe en Windows) y se puede encontrar en la carpeta bin del JDK.

A partir de Java 1.8 se incluye una nueva implementación de JavaScript (Nashorn: https://blogs.oracle.com/nashorn/)

Así que en Java 1.8 se llama al comandojjs (jjs.exe en Windows)

 8
Author: jbandi,
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-08-23 22:02:30

FWIW, nodo.js viene con un shell, intente escribir:

node-repl

Una vez instalado el nodo.js para verlo en acción. Es bastante estándar instalar rlwrap para que funcione bien.

 6
Author: thejefflarson,
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
2010-05-31 05:38:35

Es posible que desee comprobar hacia fuera Rhino.

El Shell de Rhino proporciona una forma de ejecutar scripts JavaScript en modo batch:

java org.mozilla.javascript.tools.shell.Main my_javascript_code.js [args]
 3
Author: Daniel Vassallo,
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
2010-05-31 04:52:22

Uso Ubuntu 12.10 y js desde commandline

Está disponible con mi instalación de java:

el@apollo:~/foo$ java -version
java version "1.6.0_27"
el@apollo:~/foo$ which js
/usr/bin/js

Algunos ejemplos:

el@apollo:~/foo$ js
> 5
5

> console.log("hello");
hello
undefined

> var f = function(){ console.log("derp"); };
undefined
> f();
derp

> var mybool = new Boolean();
undefined
> mybool
{}
> mybool == true
false
> mybool == false
true

> var myobj = {};
undefined
> myobj.skipper = "on my mark, engage!"
'on my mark, engage!'
> myobj.skipper.split(" ");
[ 'on',
  'my',
  'mark,',
  'engage!' ]

El cielo es el límite, entonces sigue adelante.

 3
Author: Eric Leschinski,
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-01-08 08:19:45

Sé que esto es viejo pero también deberías probar Zombie.js . ¡Un navegador sin cabeza que es increíblemente rápido e ideal para probar!

 2
Author: neebz,
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
2011-04-23 08:07:19

PhantomJS te permite hacer esto también

Http://phantomjs.org/

 2
Author: Sameer,
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-08-07 18:13:24

Encontré este motor JS de código abierto compatible con ECMAScript completamente escrito en C llamado duktape

Duktape es un motor Javascript incrustable, con un enfoque en la portabilidad y el tamaño compacto.

¡Buena suerte!

 2
Author: Pawan Kumar,
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-02-11 15:12:30

Bueno, existe JavaScript como OSA, una extensión que proporciona JavaScript como una alternativa a AppleScript. He estado usando eso hace unos 10 años, no sé si todavía funciona con las versiones actuales del sistema operativo

 1
Author: Sean Patrick Floyd,
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
2010-05-31 04:55:02

JSDB, disponible para Linux, Windows y Mac, debería encajar bastante bien. Utiliza el motor Javascript Spidermonkey de Mozilla y parece ser menos complicado de instalar en comparación con node.js (al menos la última vez que intenté nodo.js hace un par de años).

Encontré JSDB de esta interesante lista de shells de Javascript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Shells

 1
Author: Andz,
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-03-02 19:22:29