在没有浏览器的情况下执行JavaScript?

我正在调查没有浏览器的JavaScript编程。 我想从Linux或Mac OS X命令行运行脚本,就像我们运行任何其他脚本语言(ruby,php,perl,python …)

$ javascript my_javascript_code.js 

我研究了蜘蛛猴(Mozilla)和v8(Google),但是这两者似乎都是embedded式的。

是否有人使用Javascript作为脚本语言从命令行执行?

如果有人好奇我为什么要看这个,我一直在绕过node.js。 node.js的性能让我怀疑javascript是否是一种可行的处理大数据的脚本语言。

我发现这个话题相关的问题 ,但如果你想直接链接,在这里他们是:

  • 你可以像别人指出的那样安装Rhino。 这篇文章展示了一个简单的方法来启动和运行,以及如何简单地调用一个命令
  • 如果你在Mac上,可以使用调用WebKit的JavaScript引擎的JavaScriptCore。 这里有一个post
  • 您也可以使用Chome / Google的V8解释器。 这里是说明
  • JavaScript作为OSA很有趣,因为它可以让你(AFAIK)与脚本化的OS X应用程序进行交互,就像在AppleScript中一样(没有可怕的语法)

我很惊讶node.js不带有shell,但我想它更像是一个基于epoll / selector的callback/面向事件的web服务器,所以也许它不需要完整的JSfunction集,但是我对内部工作不太熟悉。

既然你对node.js感兴趣,并且因为它是基于V8的,所以最好遵循这些关于设置V8环境的说明,这样你就可以有一个一致的JavaScript编程基础了(我希望JSC和V8主要是一样,但我不确定)。

主要答复

是的,要回答您的问题,可以在命令行中使用JavaScript作为“常规”脚本语言,而无需使用浏览器。 由于其他人尚未提及,我看到值得一提的是:

在基于Debian的系统(至less包括Ubuntu,Linux Mint和aptosid / sidux)中,除了安装Rhino和其他已经提到的选项外,还有其他的select:

  • 安装libmozjs-24-bin软件包,它将在命令行中为您提供Mozilla的Spidermonkey引擎,作为一个简单的js24 ,它也可以用作交互式解释器。 (名称中的24表示它对应于Firefox的版本24)。

  • 安装libv8-dev包,它将为您提供Google的V8引擎。 它有一个例子,文件/usr/share/doc/libv8-dev/examples/shell.cc.gz ,你可以非常简单地解压缩和编译(例如, g++ -Os shell.cc -o shell -lv8 )。

  • 安装软件包nodejs ,它可以作为可执行文件nodejs和替代文件 (在Debian-sense中)来提供js可执行文件。 JIT编译是作为V8提供的。

  • 安装软件包libjavascriptcoregtk-3.0-bin并使用WebKit的JavaScriptCore解释器( jsc )作为命令行的常规解释器。 而且这不需要访问Mac。 在许多平台上(例如,x86和x86_64),这个解释器将带有一个JIT编译器。

所以,几乎没有编译,你会有三个重量级的JavaScript引擎在你的处置。

附录

一旦你安装了东西,你可以简单地使用#!/usr/bin/js shebang行创build文件,事情就会起作用:

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

我在iMac上安装了Node.js

 node somefile.js 

在bash将工作。

我知道你问及Linux和Mac; 我将为Windows提供答案,以防其他对Windows感兴趣的人发现你的问题。

Windows包含一个可以从命令行使用的Javascript引擎。

自Windows 98以来,所有版本的Windows都包含了一个名为“ Windows脚本宿主 ”的东西。 这是支持脚本“引擎”的Windows标准方式。 自从第一个版本以来,WSH支持JScript,Microsoft的Javascript版本。 除此之外,这意味着,从Windows命令行,您可以调用任何* .js文件的名称,它将运行在JScript引擎中。 (通过wscript.exe或cscript.exe)

你可以看到这个问题: 什么是IE9的Javascript引擎(代号为“Chakra”)的ProgId或CLSID来学习如何从cscript.exe调用更高性能的IE9 Javascript引擎。

由于没有人提到它:自Java 1.6以来,Java JDK也捆绑了JavaScript命令行和REPL。

它基于犀牛: https : //developer.mozilla.org/en/docs/Rhino

在Java 1.6和1.7中,该命令被称为jrunscript (Windows上的jrunscript.exe ),可以在JDK的bin文件夹中find。

从Java 1.8开始,捆绑了一个新的JavaScript实现(Nashorn: https ://blogs.oracle.com/nashorn/)

所以在Java 1.8中,这个命令被称为jjs (在Windows上是jjs

FWIW,node.js附带一个shell,请尝试input:

 node-repl 

一旦你安装了node.js就可以看到它的行动。 安装rlwrap以使其正常工作是非常标准的。

你可能想看看犀牛 。

Rhino Shell提供了一种以批处理模式运行JavaScript脚本的方法:

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

我知道这是旧的,但你也应该尝试Zombie.js 。 一个非常快速且非常适合testing的无头浏览器!

我从命令行使用Ubuntu 12.10和js

它可以与我的安装Java:

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

一些例子:

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

天空是极限,然后继续前进。

PhantomJS可以让你做到这一点

http://phantomjs.org/

我发现这个非常漂亮的开源ECMAScript兼容的JS引擎完全用C语言编写,叫做duktape

Duktape是一个可embedded的JavaScript引擎,重点在可移植性和紧凑的脚印。

祝你好运!

那么有JavaScript作为OSA ,这是一个扩展,提供了JavaScript作为appleScript的替代品。 我已经使用了大约10年前,不知道它是否仍然与当前的操作系统版本

JSDB ,适用于Linux,Windows和Mac应该适合这个法案很好。 它使用Mozilla的Spidermonkey Javascript引擎,与node.js相比,似乎没有什么麻烦(至less在我几年前尝试node.js的时候)。

我从这个有趣的Javascript列表中find了JSDB: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Shells