Executando JavaScript sem um navegador?

Eu estou olhando para programação JavaScript sem um navegador. Eu quero rodar scripts da linha de comando do Linux ou Mac OS X, bem como executar qualquer outra linguagem de script (ruby, php, perl, python …)

$ javascript my_javascript_code.js 

Eu olhei para o macaco-aranha (Mozilla) e v8 (Google), mas ambos parecem estar incorporados.

Alguém está usando JavaScript como uma linguagem de script a ser executada a partir da linha de comando?

Se alguém está curioso por que estou olhando para isso, eu tenho andado por cima do node.js. O desempenho do node.js me faz pensar se o javascript pode ser uma linguagem de script viável para processar dados grandes.

Eu encontrei esta questão relacionada sobre o tema, mas se você quiser links diretos, aqui estão eles:

  • Você pode instalar o Rhino como outros apontaram. Este post mostra uma maneira fácil de colocá-lo em prática e como aliasar um comando para invocá-lo facilmente
  • Se você está em um Mac, você pode usar o JavaScriptCore, que invoca o mecanismo JavaScript do WebKit. Aqui está um post sobre isso
  • Você também pode usar o intérprete V8 do Chome / Google. Aqui estão as instruções
  • O JavaScript como OSA é interessante porque permite que você (AFAIK) interaja com aplicativos OS X que podem ser programados como se você estivesse no AppleScript (sem a péssima syntax)

Estou surpreso que o node.js não vem com um shell, mas eu acho que é mais como um webserver baseado em events / callback baseado em seletor / epoll, então talvez ele não precise do conjunto de resources JS completo, mas eu Não estou muito familiarizado com seu funcionamento interno.

Como você parece interessado em node.js e como é baseado no V8, talvez seja melhor seguir essas instruções sobre como configurar um ambiente V8 para que você possa ter uma base consistente para sua programação JavaScript (espero que o JSC e o V8 sejam na maioria o mesmo, mas não tenho certeza).

Resposta Principal

Sim, para responder à sua pergunta, é possível usar JavaScript como uma linguagem de script “regular” na linha de comando, sem um navegador. Como outros ainda não mencionaram, vejo que vale a pena mencionar:

Em sistemas baseados em Debian (e isso inclui Ubuntu, Linux Mint e aptosid / sidux, pelo menos), além das opções de instalação do Rhino e outras já mencionadas, você tem outras opções:

  • Instale o libmozjs-24-bin , que fornecerá o mecanismo Spidermonkey da Mozilla na linha de comando como um simples js24 , que pode ser usado também como um interpretador interativo. (O 24 no nome significa que corresponde à versão 24 do Firefox).

  • Instale o pacote libv8-dev , que fornecerá o mecanismo V8 do Google. Ele tem, como um dos seus exemplos, o arquivo /usr/share/doc/libv8-dev/examples/shell.cc.gz que você pode descompactar e compilar de forma muito simples (por exemplo, g++ -Os shell.cc -o shell -lv8 ).

  • Instale o pacote nodejs e ele estará disponível como o executável nodejs e como uma alternativa (no sentido do Debian) para fornecer o executável js . A compilation JIT é fornecida como cortesia do V8.

  • Instale o pacote libjavascriptcoregtk-3.0-bin e use o intérprete JavaScriptCore do WebKit ( jsc ) como um interpretador regular a partir da linha de comando. E isso sem precisar ter access a um Mac. Em muitas plataformas (por exemplo, x86 e x86_64), esse interpretador virá com um compilador JIT.

Portanto, com quase nenhuma compilation, você terá três dos mecanismos JavaScript de peso pesado à sua disposição.

Termo aditivo

Depois de ter as coisas instaladas, você pode simplesmente criar arquivos com a linha #!/usr/bin/js shebang e as coisas simplesmente funcionarão:

 $ 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! $ 

Eu instalei o Node.js em um iMac e

 node somefile.js 

no bash vai funcionar.

Eu sei que você perguntou sobre Linux e Mac; Eu vou fornecer a resposta para o Windows, caso outras pessoas que estejam interessadas no Windows encontrem sua pergunta.

O Windows inclui um mecanismo de Javascript que pode ser usado a partir da linha de comando.

Todas as versões do Windows, desde o Windows 98, incluíram algo chamado ” O Windows Script Host “. É uma maneira padrão do Windows de suportar “mecanismos” de script. Desde o primeiro lançamento, o WSH suporta o JScript, a versão do Javascript da Microsoft. Entre outras coisas, isso significa que, a partir de uma linha de comando do Windows, você pode invocar o nome de qualquer arquivo * .js e ele será executado no mecanismo JScript. (via wscript.exe ou cscript.exe)

Você pode ver esta pergunta: O que é o ProgId ou CLSID para o mecanismo Javascript do IE9 (codinome “Chakra”) para aprender a invocar o mecanismo Javascript de alto desempenho do IE9 a partir do cscript.exe.

Como ninguém mencionou: Desde o Java 1.6 O Java JDK também vem com uma linha de comando JavaScript e REPL.

É baseado no Rhino: https://developer.mozilla.org/en/docs/Rhino

No Java 1.6 e 1.7, o comando é chamado jrunscript ( jrunscript.exe no Windows) e pode ser encontrado na pasta bin do JDK.

A partir do Java 1.8, há uma nova implementação de JavaScript (Nashorn: https://blogs.oracle.com/nashorn/ )

Então, no Java 1.8, o comando é chamado jjs ( jjs.exe no Windows)

FWIW, node.js vem com um shell, tente digitar:

 node-repl 

depois de instalar o node.js para vê-lo em ação. É bastante normal instalar o rlwrap para que ele funcione bem.

Você pode querer verificar Rhino .

O Rhino Shell fornece uma maneira de executar scripts JavaScript no modo em lote:

 java org.mozilla.javascript.tools.shell.Main my_javascript_code.js [args] 

Eu uso o Ubuntu 12.10 e js da linha de comando

Está disponível com a minha instalação do java:

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

Alguns exemplos:

 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!' ] 

O céu é o limite, então continue em frente.

Eu sei que isso é velho, mas você também deve tentar Zombie.js . Um navegador sem cabeça, que é insanamente rápido e ideal para testes!

PhantomJS permite que você faça isso também

http://phantomjs.org/

Eu encontrei este motor de JS compatível com ECMAScript open source realmente bacana completamente escrito em C chamado duktape

O Duktape é um mecanismo Javascript que pode ser integrado, com foco na portabilidade e no tamanho compacto.

Boa sorte!

Bem, há JavaScript como OSA , uma extensão que fornece JavaScript como uma alternativa ao AppleScript. Eu tenho usado isso há cerca de 10 anos, não sei se ele ainda está trabalhando com as versões atuais do sistema operacional

O JSDB , disponível para Linux, Windows e Mac, deve se encheckboxr muito bem no projeto. Ele usa o mecanismo Javascript do Spidermonkey do Mozilla e parece ser menos complicado de instalar comparado ao node.js (pelo menos da última vez que tentei node.js alguns anos atrás).

Eu encontrei o JSDB desta interessante lista de shells Javascript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Shells