Executando JavaScript sem um navegador?

129

Eu estou olhando para a programação Javascript sem um navegador. Quero executar scripts a partir da linha de comando do Linux ou Mac OS X, assim como executamos 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 para ser executado na linha de comando?

Se alguém é curioso porque eu estou olhando para isso, eu fui bisbilhotando node.js . O desempenho do node.js me faz pensar se o javascript pode ser uma linguagem de script viável para o processamento de grandes dados.

Daniel
fonte
node.js é um interpretador de linha de comando javascript, não é?
Nathan
5
node.js não é um intérprete, é uma estrutura assíncrona criada na implementação de javascript V8 do Google. Embora eu acredito intererpter javascript de V8 está incluído em um nó de instalar
1
Se o intérprete CLI do V8 se popularizar, pode ser uma ferramenta de ensino muito boa. Eu acho que aprender a programar em JavaScript pode ser bem divertido. Lua pode ser honestamente a melhor escolha (as "classes" de JS confundem todo mundo), mas a capacidade de JS de ser lançada na web agradaria aos mexicanos. Eu mesmo posso experimentar esta CLI V8.
Jasonmp85
@ jasonmp85 a execução de funções com uma nova palavra-chave cria instâncias de objetos. Quando você faz referência a uma propriedade / método em uma instância, se o próprio objeto não a possuir, a propriedade prototype da função construtora é verificada. Use isso para métodos públicos e defina vars locais para a função construtora para obter efetivamente métodos / props privados (estes são tecnicamente vars ref'd de fechamento). O fim.
Erik Reppen

Respostas:

46

Encontrei essa pergunta relacionada ao tópico, mas se você quiser links diretos, aqui estão eles:

  • Você pode instalar o Rhino como outros indicaram. Esta postagem mostra uma maneira fácil de colocá-lo em funcionamento e como alias um comando para invocá-lo facilmente
  • Se você estiver em um Mac, poderá usar o JavaScriptCore, que chama o mecanismo JavaScript do WebKit. Aqui está um post nele
  • 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 com script, como se estivesse no AppleScript (sem a terrível sintaxe)

Estou surpreso que o node.js não vem com um shell, mas acho que é realmente mais como um servidor da Web orientado a eventos e retorno de chamada baseado em epoll / seletor, talvez não precise do conjunto completo de recursos JS, mas eu não estou muito familiarizado com o seu funcionamento interno.

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

jasonmp85
fonte
o link do intérprete do Chrome / Google V8 é exatamente o que eu estava procurando! Obrigado!
Daniel
2
O NodeJS em 0.1.101 possui uma substituição de nó que fornece a você um acesso da CLI ao ambiente. É ótimo para testar / aprender JS.
28510 CyberFonic
Com o nodejs v0.10.25 no Ubuntu, digitar nodejsno terminal dá acesso ao REPL.
1212314
Qual das opções acima, se houver, inclui o HTML DOM?
Old Geezer
57

Resposta Principal

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

Em sistemas baseados no 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-binpacote, que fornecerá o mecanismo Spidermonkey da Mozilla na linha de comando como um simples js24, que também pode ser usado como intérprete interativo. (O 24nome indica que corresponde à versão 24 do Firefox).

  • Instale o libv8-devpacote, que fornecerá o mecanismo V8 do Google. Possui, como um de seus exemplos, o arquivo /usr/share/doc/libv8-dev/examples/shell.cc.gzque você pode descompactar e compilar com muita simplicidade (por exemplo, g++ -Os shell.cc -o shell -lv8).

  • Instale o pacote nodejse ele estará disponível como executável nodejse como alternativa (no sentido Debian) para fornecer o jsexecutável. A compilação JIT é fornecida como cortesia da V8.

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

Portanto, com quase nenhuma compilação, você terá três dos mecanismos JavaScript pesados ​​à sua disposição.

Termo aditivo

Depois de instalar as coisas, você pode simplesmente criar arquivos com a #!/usr/bin/jslinha shebang e tudo funcionará:

$ 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
fonte
23

Instalei o Node.js em um iMac e

node somefile.js

no bash vai funcionar.

falta de polaridade
fonte
AMD! @ aw04 Absolutely
theapache64
para mim foi nodejs somefile.jsdesde que eu instalei o pacote nodejs
user2490003 16/08
esta é a resposta certa em 2019. O Node.JS é sempre o caminho mais onipresente e mais simples a seguir.
wilsonhobbs
10

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

O Windows inclui um mecanismo Javascript que pode ser usado na linha de comando.

Todas as versões do Windows, desde o Windows 98, incluem 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, em uma linha de comando do Windows, você pode simplesmente chamar o nome de qualquer arquivo * .js, e ele será executado no mecanismo JScript. (via wscript.exe ou cscript.exe)

Você pode ver esta pergunta: Qual é o mecanismo Javascript do ProgId ou CLSID para IE9 (codinome "Chakra") para aprender a chamar o mecanismo Javascript IE9 de alto desempenho do cscript.exe.

Cheeso
fonte
8

Como ninguém o 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

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

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

Portanto, no Java 1.8, o comando é chamado jjs( jjs.exeno Windows)

jbandi
fonte
6

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

node-repl

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

thejefflarson
fonte
Estou descobrindo o repl-node e usando o hash-bang, ambos muito bons para obter programas rápidos trabalhando com o NodeJS. É rápido e fácil de usar.
28410 CyberFonic
3

Você pode querer conferir o 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]
Daniel Vassallo
fonte
3

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

neebz
fonte
3

Eu uso o Ubuntu 12.10 e js da linha de comando

Está disponível na 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.

Eric Leschinski
fonte
2

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

http://phantomjs.org/

Sameer Alibhai
fonte
2

Eu encontrei esse mecanismo JS realmente bacana de código aberto, compatível com ECMAScript, completamente escrito em C chamado duktape

Duktape é um mecanismo Javascript incorporável, com foco na portabilidade e tamanho compacto.

Boa sorte!

Pawan Kumar
fonte
1

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

Sean Patrick Floyd
fonte
1

O JSDB , disponível para Linux, Windows e Mac, deve se encaixar perfeitamente. Ele usa o mecanismo Javascript Spidermonkey da Mozilla e parece ser menos complicado de instalar em comparação com o node.js (pelo menos na última vez que tentei o node.js há alguns anos).

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

Andz
fonte