JavaScript ohne Browser ausführen?

129

Ich beschäftige mich mit Javascript-Programmierung ohne Browser. Ich möchte Skripte über die Linux- oder Mac OS X-Befehlszeile ausführen, ähnlich wie wir jede andere Skriptsprache ausführen (Ruby, PHP, Perl, Python ...).

$ javascript my_javascript_code.js

Ich habe mir Spider Monkey (Mozilla) und v8 (Google) angesehen, aber beide scheinen eingebettet zu sein.

Verwendet jemand Javascript als Skriptsprache, die über die Befehlszeile ausgeführt werden soll?

Wenn jemand neugierig ist, warum ich das untersuche, habe ich mich in node.js umgesehen . Die Leistung von node.js lässt mich fragen, ob Javascript eine brauchbare Skriptsprache für die Verarbeitung großer Datenmengen ist.

Daniel
quelle
node.js ist ein Javascript-Befehlszeileninterpreter, nicht wahr?
Nathan
5
node.js ist kein Interpreter, sondern ein asynchrones Framework, das auf der V8-Javascript-Implementierung von Google basiert. Obwohl ich glaube, dass der Javascript-Intererpter von V8 in einer Knoteninstallation enthalten ist
1
Wenn der CLI-Interpreter von V8 populär wird, könnte er ein wirklich gutes Lehrmittel sein. Ich denke, das Programmieren in JavaScript zu lernen könnte ziemlich viel Spaß machen. Lua mag ehrlich gesagt die beste Wahl sein (JS '"Klassen" verwirren jeden zum Teufel), aber JS' Fähigkeit, ins Internet gestellt zu werden, würde Bastler ansprechen. Ich kann diese V8-CLI selbst ausprobieren.
Jasonmp85
@ jasonmp85 Durch Ausführen von Funktionen mit einem neuen Schlüsselwort werden Objektinstanzen erstellt. Wenn Sie auf eine Eigenschaft / Methode in einer Instanz verweisen und das Objekt selbst nicht über diese verfügt, wird die Prototyp-Eigenschaft der Konstruktorfunktion überprüft. Verwenden Sie dies für öffentliche Methoden und definieren Sie lokale Variablen für die Konstruktorfunktion, um effektiv private Methoden / Requisiten abzurufen (dies sind technisch geschlossene vars). Das Ende.
Erik Reppen

Antworten:

46

Ich habe diese verwandte Frage zum Thema gefunden, aber wenn Sie direkte Links wünschen, sind sie hier:

  • Sie können Rhino installieren, wie andere bereits erwähnt haben. Dieser Beitrag zeigt eine einfache Möglichkeit, es zum Laufen zu bringen und einen Befehl als Alias ​​zu verwenden, um es einfach aufzurufen
  • Wenn Sie einen Mac verwenden, können Sie JavaScriptCore verwenden, das die JavaScript-Engine von WebKit aufruft. Hier ist ein Beitrag dazu
  • Sie können auch den V8-Interpreter von Chome / Google verwenden. Hier sind Anweisungen
  • Das JavaScript als OSA ist interessant, weil Sie damit (AFAIK) mit skriptfähigen OS X-Apps interagieren können, als wären Sie in AppleScript (ohne die schreckliche Syntax).

Ich bin überrascht, dass node.js nicht mit einer Shell geliefert wird, aber ich denke, es ähnelt eher einem epoll- / selektorbasierten Callback- / ereignisorientierten Webserver. Vielleicht benötigt es nicht den vollständigen JS-Funktionsumfang, aber ich Ich bin nicht allzu vertraut mit seinem Innenleben.

Da Sie anscheinend an node.js interessiert sind und es auf V8 basiert, ist es möglicherweise am besten, diese Anweisungen zum Einrichten einer V8-Umgebung zu befolgen, damit Sie eine konsistente Grundlage für Ihre JavaScript-Programmierung haben (ich hoffe, JSC und V8 sind es meistens das gleiche, aber ich bin nicht sicher).

jasonmp85
quelle
Der Chrome / Google V8-Interpreter-Link ist genau das, wonach ich gesucht habe! Danke dir!
Daniel
2
NodeJS in 0.1.101 verfügt über eine Node-Repl, die Ihnen einen CLI-Zugriff auf die Umgebung ermöglicht. Es ist großartig zum Testen / Lernen von JS.
CyberFonic
Mit nodejs v0.10.25 unter Ubuntu erhalten Sie durch Eingabe nodejsdes Terminals Zugriff auf REPL.
12ван Бишевац
Welche der oben genannten Optionen enthalten, falls vorhanden, das HTML-DOM?
Old Geezer
57

Hauptantwort

Ja, um Ihre Frage zu beantworten, ist es möglich, JavaScript als "normale" Skriptsprache über die Befehlszeile ohne Browser zu verwenden. Da andere es noch nicht erwähnt haben, sehe ich, dass es erwähnenswert ist:

Auf Debian-basierten Systemen (und dies schließt zumindest Ubuntu, Linux Mint und aptosid / sidux ein) haben Sie neben den Optionen zur Installation von Rhino und anderen bereits erwähnten andere Optionen:

  • Installieren Sie das libmozjs-24-binPaket, mit dem Sie die Spidermonkey-Engine von Mozilla in der Befehlszeile als einfaches Paket erhalten, das js24auch als interaktiver Interpreter verwendet werden kann. (Das 24im Namen bedeutet, dass es Version 24 von Firefox entspricht).

  • Installieren Sie das libv8-devPaket, mit dem Sie die V8-Engine von Google erhalten. Es hat als eines seiner Beispiele die Datei, /usr/share/doc/libv8-dev/examples/shell.cc.gzdie Sie sehr einfach dekomprimieren und kompilieren können (z g++ -Os shell.cc -o shell -lv8. B. ).

  • Installieren Sie das Paket nodejsund es wird sowohl als ausführbare Datei nodejsals auch als Alternative (im Debian-Sinne) zur Bereitstellung der jsausführbaren Datei verfügbar sein . Die JIT-Kompilierung wird mit freundlicher Genehmigung von V8 bereitgestellt.

  • Installieren Sie das Paket libjavascriptcoregtk-3.0-binund verwenden Sie den JavaScriptCore-Interpreter ( jsc) von WebKit als regulären Interpreter über die Befehlszeile. Und das ohne Zugriff auf einen Mac. Auf vielen Plattformen (z. B. x86 und x86_64) wird dieser Interpreter mit einem JIT-Compiler geliefert.

Mit fast keiner Kompilierung stehen Ihnen drei der schwergewichtigen JavaScript-Engines zur Verfügung.

Nachtrag

Sobald Sie die Dinge installiert haben, können Sie einfach Dateien mit der #!/usr/bin/jsShebang-Zeile erstellen und die Dinge funktionieren einfach:

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

Ich habe Node.js auf einem iMac installiert und

node somefile.js

in bash wird funktionieren.

Unpolarität
quelle
OH MEIN GOTT! @ aw04 Absolut
theapache64
für mich war es, nodejs somefile.jsseit ich das nodejs-Paket installiert hatte
user2490003
Dies ist die richtige Antwort im Jahr 2019. Node.JS ist immer der allgegenwärtigste und einfachste Weg.
Wilsonhobbs
10

Ich weiß, dass Sie nach Linux und Mac gefragt haben. Ich werde die Antwort für Windows geben, falls andere Leute, die an Windows interessiert sind, Ihre Frage finden.

Windows enthält eine Javascript-Engine, die über die Befehlszeile verwendet werden kann.

Alle Windows-Versionen seit Windows 98 enthalten " The Windows Script Host ". Es ist eine Windows-Standardmethode zur Unterstützung von Skript- "Engines". Seit der ersten Version unterstützt WSH JScript, die Microsoft-Version von Javascript. Dies bedeutet unter anderem, dass Sie über eine Windows-Befehlszeile einfach den Namen einer beliebigen * .js-Datei aufrufen können und diese in der JScript-Engine ausgeführt wird. (entweder über wscript.exe oder cscript.exe)

Sie können diese Frage sehen: Was ist die ProgId oder CLSID für die Javascript-Engine von IE9 (Codename "Chakra") , um zu erfahren, wie Sie die leistungsstärkere Javascript-Engine von IE9 aus cscript.exe aufrufen.

Cheeso
quelle
8

Da es niemand erwähnt hat: Seit Java 1.6 Das Java JDK wird auch mit einer JavaScript-Kommandozeile und REPL geliefert.

Es basiert auf Rhino: https://developer.mozilla.org/en/docs/Rhino

In Java 1.6 und 1.7 heißt der Befehl jrunscript(jrunscript.exe unter Windows) und befindet sich im Ordner bin des JDK.

Ab Java 1.8 wird eine neue JavaScript-Implementierung gebündelt (Nashorn: https://blogs.oracle.com/nashorn/ )

In Java 1.8 heißt der Befehl also jjs( jjs.exeunter Windows)

jbandi
quelle
6

FWIW, node.js wird mit einer Shell geliefert. Geben Sie Folgendes ein:

node-repl

Sobald Sie node.js installiert haben, um es in Aktion zu sehen. Es ist ziemlich normal, rlwrap zu installieren, damit es gut funktioniert.

thejefflarson
quelle
Ich finde Node-Repl und Hash-Bang sehr gut, um schnelle Programme mit NodeJS zum Laufen zu bringen. Es ist schnell und einfach zu bedienen.
CyberFonic
3

Vielleicht möchten Sie Rhino ausprobieren .

Die Rhino Shell bietet eine Möglichkeit, JavaScript-Skripte im Batch-Modus auszuführen:

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

Ich weiß, dass dies alt ist, aber Sie sollten auch Zombie.js versuchen . Ein kopfloser Browser, der wahnsinnig schnell und ideal zum Testen ist!

neebz
quelle
3

Ich benutze Ubuntu 12.10 und js von der Kommandozeile

Es ist mit meiner Installation von Java verfügbar:

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

Einige Beispiele:

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

Der Himmel ist die Grenze, dann machen Sie weiter.

Eric Leschinski
quelle
2

Mit PhantomJS können Sie dies ebenfalls tun

http://phantomjs.org/

Sameer Alibhai
quelle
2

Ich fand diese wirklich raffinierte Open Source ECMAScript-kompatible JS Engine, die vollständig in C geschrieben ist und duktape heißt

Duktape ist eine einbettbare Javascript-Engine mit Schwerpunkt auf Portabilität und kompakter Grundfläche.

Viel Glück!

Pawan Kumar
quelle
1

Nun, es gibt JavaScript als OSA , eine Erweiterung, die JavaScript als Alternative zu AppleScript bereitstellt. Ich habe das vor ungefähr 10 Jahren verwendet, weiß nicht, ob es noch mit aktuellen Betriebssystemversionen funktioniert

Sean Patrick Floyd
quelle
1

JSDB , verfügbar für Linux, Windows und Mac, sollte ziemlich gut passen. Es verwendet Mozillas Spidermonkey Javascript-Engine und scheint im Vergleich zu node.js weniger umständlich zu installieren zu sein (zumindest das letzte Mal, als ich node.js vor ein paar Jahren ausprobiert habe).

Ich habe JSDB aus dieser interessanten Liste von Javascript-Shells gefunden: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Shells

Andz
quelle