unix - Köra JavaScript utan en webbläsare?
Jag undersöker Javascript-programmering utan en webbläsare. Jag vill köra skript från Linux- eller Mac OS X-kommandoraden, precis som vi kör ett annat skriptspråk (ruby, php, perl, python...)
javascript my_javascript_code.js
Jag tittade på Spider Monkey (Mozilla) och V8 (Google), men båda verkar vara inbäddade.
Är det någon som använder Javascript som ett skriptspråk som ska köras från kommandoraden?
Om någon är nyfiken på varför jag tittar på detta, har jag grävt runt i node.js. Prestandan hos node.js får mig att undra om javascript kan vara ett gångbart skriptspråk för att bearbeta stora mängder data.
Svar #1
Huvudsvar
Ja, för att svara på din fråga, det är möjligt att använda JavaScript som ett "vanligt" skriptspråk från kommandoraden, utan en webbläsare. Eftersom andra ännu inte har nämnt det, ser jag att det är värt att nämna:
På Debian-baserade system (och detta inkluderar Ubuntu, Linux Mint och aptosid/sidux, åtminstone), förutom alternativen att installera Rhino och andra som redan nämnts, har du andra alternativ:
Installera paketet
libmozjs-78-0, som kommer att ge dig Mozillas Spidermonkey-motor på kommandoraden som en enkeljs24, som även kan användas som en interaktiv tolk. (24i namnet betyder att det motsvarar version 24 av Firefox).Installera paketet
libv8-dev, vilket kommer att ge dig Googles V8-motor. Det har, som ett av sina exempel, filen/usr/share/doc/libv8-dev/examples/shell.cc.gzsom du kan dekomprimera och kompilera mycket enkelt (t.ex.,g++ -Os shell.cc -o shell -lv8).Installera paketet
nodejsoch det kommer att vara tillgängligt både som körbar filnodejsoch som ett alternativ (i Debian-sinne) för att tillhandahållajs-körbar filen. JIT-kompilering tillhandahålls som en tjänst från V8.Installera paketet
libjavascriptcoregtk-4.0-binoch använd WebKits JavaScriptCore-tolk (jsc) som en vanlig tolk från kommandoraden. Och detta utan att behöva ha tillgång till en Mac. På många plattformar (t.ex. x86 och x86_64) kommer denna tolk att levereras med en JIT-kompilator.
Så, med nästan ingen kompilering kommer du att ha tre av de tyngsta JavaScript-motorerna till ditt förfogande.
Tillägg
När du har installerat saker kan du helt enkelt skapa filer med #!/usr/bin/js shebang-raden och allt kommer bara att fungera:
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!
$
Äldre versioner:
libmozjs-24-bin, libmozjs-52, libmozjs-60, libmozjs-91, libjavascriptcoregtk-3.0-bin
Svar #2
Jag hittade denna relaterade fråga om ämnet, men om du vill ha direkta länkar, här är de:
- Du kan installera Rhino som andra har påpekat. Det här inlägget visar ett enkelt sätt att få igång det och hur man aliasar ett kommando för att enkelt anropa det
- Om du använder en Mac kan du använda JavaScriptCore, som anropar WebKits JavaScript-motor. Här är ett inlägg om det
- Du kan också använda Chome/Googles V8-tolk. Här är instruktioner
- JavaScript som OSA är intressant eftersom det låter dig (såvitt jag vet) interagera med scriptbara OS X-appar som om du var i AppleScript (utan den fruktansvärda syntaxen)
Jag är förvånad över att node.js inte kommer med ett skal, men jag antar att det egentligen är mer som en epoll/selector-baserad callback/event-orienterad webbserver, så kanske behöver det inte hela JS-funktionsuppsättningen, men jag är inte så bekant med dess inre funktioner.
Eftersom du verkar intresserad av node.js och eftersom det är baserat på V8, kan det vara bäst att följa de instruktionerna för att sätta upp en V8-miljö så att du kan ha en konsekvent grund för din JavaScript-programmering (Jag hoppas att JSC och V8 är mestadels samma, men jag är inte säker).
Svar #3
Jag har installerat Node.js på en iMac och
node somefile.js
i bash kommer att fungera.
Svar #4
Jag vet att du frågade om Linux och Mac; jag kommer att ge svaret för Windows, ifall andra som är intresserade av Windows hittar din fråga.
Windows inkluderar en Javascript-motor som kan användas från kommandoraden.
Alla versioner av Windows, sedan Windows 98, har inkluderat något som kallas "The Windows Script Host". Det är ett Windows-standard sätt att stödja skript "motorer". Sedan den första utgåvan stöder WSH JScript, Microsofts version av Javascript. Bland annat innebär detta att du från en Windows-kommandorad kan helt enkelt anropa namnet på vilken *.js-fil som helst, och den kommer att köras i JScript-motorn. (via antingen wscript.exe eller cscript.exe)
Du kan se denna fråga: Vad är ProgId eller CLSID för IE9:s Javascript-motor (kodnamn "Chakra") för att lära dig hur man anropar den högpresterande IE9 Javascript-motorn från cscript.exe.
