¿Ejecutar JavaScript sin un navegador?

129

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 scripts (ruby, php, perl, python ...)

$ javascript my_javascript_code.js

Miré en el mono araña (Mozilla) y v8 (Google), pero ambos parecen estar incrustados.

¿Alguien está usando Javascript como lenguaje de script para ejecutar desde la línea de comandos?

Si alguien tiene curiosidad por eso que estoy buscando en esto, he estado hurgando Node.js . El rendimiento de node.js me hace preguntarme si javascript puede ser un lenguaje de script viable para procesar grandes datos.

Daniel
fuente
node.js es un intérprete de línea de comandos de JavaScript, ¿no?
Nathan
55
node.js no es un intérprete, es un marco asíncrono integrado en la implementación de JavaScript V8 de Google. Aunque sí creo que el intererpter javascript de V8 está incluido en una instalación de nodo
1
Si el intérprete CLI de V8 se vuelve popular, podría ser una muy buena herramienta de enseñanza. Creo que aprender a programar en JavaScript podría ser bastante divertido. Honestamente, Lua podría ser la mejor opción (las "clases" de JS confunden a todos), pero la capacidad de JS de ser lanzado en la web sería atractiva para los aficionados. Puedo probar este V8 CLI yo mismo.
jasonmp85
@ jasonmp85 ejecutando funciones con una nueva palabra clave construye instancias de objeto. Cuando hace referencia a una propiedad / método en una instancia, si el objeto en sí no lo tiene, se verifica la propiedad prototipo de la función constructora. Use esto para métodos públicos y defina vars locales para la función de constructor para obtener métodos / accesorios privados de manera efectiva (estos son vars refiridos técnicamente de cierre). El fin.
Erik Reppen el

Respuestas:

46

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

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

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

Como parece interesado en node.js y está basado en V8, podría ser mejor seguir esas instrucciones para configurar un entorno V8 para que pueda tener una base coherente para su programación de JavaScript (espero que JSC y V8 sean principalmente lo mismo, pero no estoy seguro).

jasonmp85
fuente
¡El enlace del intérprete de Chrome / Google V8 es exactamente lo que estaba buscando! ¡Gracias!
Daniel
2
NodeJS en 0.1.101 tiene una respuesta de nodo que le da acceso de CLI al entorno. Es genial para probar / aprender JS.
CyberFonic
Con nodejs v0.10.25 en Ubuntu, escribir nodejsen la terminal da acceso a REPL.
Иван Бишевац
¿Cuál de los anteriores, si corresponde, incluye el HTML DOM?
Old Geezer
57

Respuesta principal

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

En los 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:

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

  • Instale el libv8-devpaquete, que le proporcionará el motor V8 de Google. Tiene, como uno de sus ejemplos, el archivo /usr/share/doc/libv8-dev/examples/shell.cc.gzque puede descomprimir y compilar de manera muy simple (por ejemplo, g++ -Os shell.cc -o shell -lv8).

  • Instale el paquete nodejsy estará disponible como el ejecutable nodejsy como una alternativa (en el sentido de Debian) para proporcionar el jsejecutable. La compilación JIT se proporciona como cortesía de V8.

  • Instale el paquete libjavascriptcoregtk-3.0-biny use el intérprete JavaScriptCore de WebKit ( jsc) como intérprete habitual 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.

Entonces, con casi ninguna compilación, tendrá a su disposición tres de los motores JavaScript más pesados.

Apéndice

Una vez que haya instalado las cosas, simplemente puede crear archivos con la #!/usr/bin/jslínea 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!
$
rbrito
fuente
23

He instalado Node.js en un iMac y

node somefile.js

en bash funcionará.

nonopolaridad
fuente
¡DIOS MIO! @ aw04 Absolutamente
theapache64
para mí fue nodejs somefile.jsdesde que instalé el paquete nodejs
user2490003
esta es la respuesta correcta en 2019. Node.JS es siempre la forma más ubicua y simple de hacerlo.
wilsonhobbs
10

Sé que preguntaste sobre Linux y Mac; Voy a proporcionar la respuesta para Windows, en caso de que otras personas interesadas en Windows encuentren su pregunta.

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

Todas las versiones de Windows, desde Windows 98, han incluido algo llamado " The Windows Script Host ". Es una forma estándar de Windows para admitir "motores" de script. Desde el primer lanzamiento, WSH es compatible con JScript, la versión de Javascript de Microsoft. Entre otras cosas, esto significa que, desde una línea de comandos de Windows, puede invocar el nombre de cualquier archivo * .js y se ejecutará en el motor JScript. (a través de wscript.exe o cscript.exe)

Puede ver esta pregunta: ¿Cuál es el ProgId o CLSID para el motor Javascript de IE9 (con el nombre en código "Chakra") para aprender cómo invocar el motor Javascript IE9 de mayor rendimiento desde cscript.exe.

Cheeso
fuente
8

Como nadie lo mencionó: desde Java 1.6 El JDK de Java también viene incluido con una línea de comandos de JavaScript y REPL.

Está basado en Rhino: https://developer.mozilla.org/en/docs/Rhino

En Java 1.6 y 1.7, el comando se llama jrunscript( jrunscript.exeen 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/ )

Entonces, en Java 1.8, el comando se llama jjs( jjs.exeen Windows)

jbandi
fuente
6

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

node-repl

una vez que hayas instalado node.js para verlo en acción. Es bastante estándar instalar rlwrap para que funcione bien.

thejefflarson
fuente
Estoy encontrando node-repl, así como usando hash-bang, muy buenos para obtener programas rápidos que funcionen con NodeJS. Es rápido y fácil de usar.
CyberFonic el
3

Es posible que desee ver Rhino .

Rhino Shell proporciona una forma de ejecutar scripts JavaScript en modo por lotes:

java org.mozilla.javascript.tools.shell.Main my_javascript_code.js [args]
Daniel Vassallo
fuente
3

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!

neebz
fuente
3

Yo uso Ubuntu 12.10 y js desde la línea de comandos

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, luego sigue recto.

Eric Leschinski
fuente
2

Encontré este motor JS realmente ingenioso 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!

Pawan Kumar
fuente
1

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

Sean Patrick Floyd
fuente
1

JSDB , disponible para Linux, Windows y Mac debería ajustarse bastante bien. Utiliza el motor Javascript de Spidermonkey de Mozilla y parece ser menos complicado de instalar en comparación con node.js (al menos la última vez que probé node.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

Andz
fuente