Esegui JavaScript senza un browser?


129

Sto esaminando la programmazione Javascript senza browser. Voglio eseguire script dalla riga di comando di Linux o Mac OS X, in modo simile a qualsiasi altro linguaggio di scripting (ruby, php, perl, python ...)

$ javascript my_javascript_code.js

Ho esaminato Spider Spider (Mozilla) e v8 (Google), ma entrambi sembrano essere integrati.

Qualcuno che utilizza Javascript come linguaggio di scripting può essere eseguito dalla riga di comando?

Se qualcuno è curioso il motivo per cui sto cercando in questo, ho rovistando node.js . Le prestazioni di node.js mi chiedono se javascript possa essere un linguaggio di script valido per l'elaborazione di dati di grandi dimensioni.


node.js è un interprete della riga di comando javascript, vero?
Nathan,

5
node.js non è un interprete, è un framework asincrono costruito sull'implementazione javascript V8 di Google. Anche se credo che l'intererpter javascript di V8 sia incluso in un'installazione di nodo

1
Se l'interprete CLI di V8 diventa popolare potrebbe essere un ottimo strumento di insegnamento. Penso che imparare a programmare in JavaScript possa essere abbastanza divertente. Lua potrebbe essere onestamente la scelta migliore (le "classi" di JS confondono l'inferno di tutti), ma la capacità di JS di essere gettata sul web farebbe appello agli armeggi. Potrei provare questo CLI V8 da solo.
jasonmp85,

@ jasonmp85 eseguendo funzioni con una nuova parola chiave crea istanze di oggetti. Quando si fa riferimento a una proprietà / metodo su un'istanza, se l'oggetto stesso non lo possiede, viene verificata la proprietà prototipo della funzione di costruzione. Usalo per i metodi pubblici e definisci le variabili locali alla funzione di costruzione per ottenere efficacemente metodi / oggetti di scena privati ​​(questi sono tecnicamente parametri di chiusura). La fine.
Erik Reppen,

Risposte:


46

Ho trovato questa domanda correlata sull'argomento, ma se vuoi collegamenti diretti, eccoli qui:

  • Puoi installare Rhino come altri hanno sottolineato. Questo post mostra un modo semplice per farlo funzionare e come alias un comando per invocarlo facilmente
  • Se sei su un Mac, puoi usare JavaScriptCore, che richiama il motore JavaScript di WebKit. Ecco un post su di esso
  • Puoi anche usare l'interprete V8 di Chome / Google. Ecco le istruzioni
  • JavaScript come OSA è interessante perché ti consente (AFAIK) di interagire con le app OS X con script come se fossi in AppleScript (senza la terribile sintassi)

Sono sorpreso che node.js non abbia una shell, ma immagino che sia molto più simile a un server web epoll / callback basato su selettore / orientato agli eventi, quindi forse non ha bisogno del set completo di funzionalità JS, ma io non ho troppa familiarità con i suoi meccanismi interni.

Poiché sembri interessato a node.js e poiché si basa su V8, potrebbe essere meglio seguire quelle istruzioni su come configurare un ambiente V8 in modo da poter avere una base coerente per la programmazione JavaScript (dovrei sperare che JSC e V8 siano principalmente lo stesso, ma non ne sono sicuro).


il link dell'interprete Chrome / Google V8 è esattamente quello che stavo cercando! Grazie!
Daniel,

2
NodeJS in 0.1.101 ha un nodo di sostituzione che ti dà un accesso CLI all'ambiente. È ottimo per testare / apprendere JS.
CyberFonic,

Con nodejs v0.10.25 su Ubuntu digitando nodejsterminal si accede a REPL.
Иван Бишевац,

Quale delle precedenti, se presenti, include il DOM HTML?
Old Geezer,

57

Risposta principale

Sì, per rispondere alla tua domanda, è possibile utilizzare JavaScript come linguaggio di script "normale" dalla riga di comando, senza browser. Dato che altri non l'hanno ancora menzionato, vedo che vale la pena menzionare:

Sui sistemi basati su Debian (e questo include Ubuntu, Linux Mint e almeno aptosid / sidux), oltre alle opzioni di installazione di Rhino e altre già menzionate, ci sono altre opzioni:

  • Installa il libmozjs-24-binpacchetto, che ti fornirà il motore Spidermonkey di Mozilla sulla riga di comando come un semplice js24, che può essere utilizzato anche come interprete interattivo. (Il 24nome indica che corrisponde alla versione 24 di Firefox).

  • Installa il libv8-devpacchetto, che ti fornirà il motore V8 di Google. Ha, come uno dei suoi esempi, il file /usr/share/doc/libv8-dev/examples/shell.cc.gzche è possibile decomprimere e compilare in modo molto semplice (ad es g++ -Os shell.cc -o shell -lv8.).

  • Installa il pacchetto nodejse sarà disponibile sia come eseguibile nodejsche come alternativa (nel senso di Debian) per fornire l' jseseguibile. La compilation JIT è fornita per gentile concessione di V8.

  • Installa il pacchetto libjavascriptcoregtk-3.0-bine usa l'interprete JavaScript ( jsc) di WebKit come interprete regolare dalla riga di comando. E questo senza bisogno di avere accesso a un Mac. Su molte piattaforme (ad esempio, x86 e x86_64), questo interprete verrà fornito con un compilatore JIT.

Quindi, con quasi nessuna compilazione avrai tre dei motori JavaScript pesanti a tua disposizione.

appendice

Una volta installate le cose, puoi semplicemente creare file con la #!/usr/bin/jslinea shebang e le cose funzioneranno:

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

23

Ho installato Node.js su un iMac e

node somefile.js

in bash funzionerà.


OH MIO DIO! @ aw04 Absolutely
theapache64

per me era nodejs somefile.jsda quando avevo installato il pacchetto
nodejs

questa è la risposta giusta nel 2019. Node.JS è sempre il modo più onnipresente e più semplice di procedere.
Wilsonhobbs,

10

So che hai chiesto informazioni su Linux e Mac; Fornirò la risposta per Windows, nel caso in cui altre persone interessate a Windows trovino la tua domanda.

Windows include un motore Javascript che può essere utilizzato dalla riga di comando.

Tutte le versioni di Windows, a partire da Windows 98, hanno incluso qualcosa chiamato " Windows Script Host ". È un modo standard di Windows per supportare "motori" di script. Sin dalla prima versione, WSH supporta JScript, la versione Microsoft di Javascript. Tra le altre cose, ciò significa che, da una riga di comando di Windows, puoi semplicemente invocare il nome di qualsiasi file * .js e verrà eseguito nel motore JScript. (tramite wscript.exe o cscript.exe)

Puoi vedere questa domanda: cos'è ProgId o CLSID per il motore Javascript di IE9 (nome in codice "Chakra") per imparare come invocare il motore Javascript IE9 ad alte prestazioni da cscript.exe.


8

Dal momento che nessuno lo ha menzionato: da Java 1.6 Java JDK viene fornito in bundle con una riga di comando JavaScript e REPL.

Si basa su Rhino: https://developer.mozilla.org/en/docs/Rhino

In Java 1.6 e 1.7 viene chiamato il comando jrunscript(jrunscript.exe su Windows) e può essere trovato nella cartella bin del JDK.

A partire da Java 1.8 è inclusa una nuova implementazione JavaScript (Nashorn: https://blogs.oracle.com/nashorn/ )

Quindi in Java 1.8 il comando è chiamato jjs( jjs.exesu Windows)


6

FWIW, node.js viene fornito con una shell, prova a digitare:

node-repl

dopo aver installato node.js per vederlo in azione. È abbastanza standard installare rlwrap per farlo funzionare bene.


Sto trovando node-repl oltre a usare l'hash-bang entrambi molto buoni per far funzionare velocemente i programmi con NodeJS. È veloce e facile da usare.
CyberFonic,

3

Potresti voler dare un'occhiata a Rhino .

Rhino Shell fornisce un modo per eseguire script JavaScript in modalità batch:

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

3

So che è vecchio ma dovresti provare anche Zombie.js . Un browser senza testa che è follemente veloce e ideale per i test!


3

Uso Ubuntu 12.10 e js dalla riga di comando

È disponibile con la mia installazione di Java:

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

Qualche esempio:

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

Il cielo è il limite, quindi prosegui dritto.



2

Ho trovato questo JS Engine conforme a ECMAScript open source davvero elegante, completamente scritto in C chiamato duktape

Duktape è un motore Javascript integrabile, incentrato sulla portabilità e sul footprint compatto.

In bocca al lupo!


1

Bene c'è JavaScript come OSA , un'estensione che fornisce JavaScript come alternativa a appleScript. L'ho usato circa 10 anni fa, non so se funziona ancora con le attuali versioni del sistema operativo


1

JSDB , disponibile per Linux, Windows e Mac dovrebbe adattarsi abbastanza bene al conto. Utilizza il motore Javascript Spidermonkey di Mozilla e sembra essere meno complicato da installare rispetto a node.js (almeno l'ultima volta che ho provato node.js un paio di anni fa).

Ho trovato JSDB da questo interessante elenco di shell Javascript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Shells

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.