没有浏览器执行JavaScript?

时间:2010-05-31 04:48:32

标签: javascript unix command-line scripting v8

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

$ javascript my_javascript_code.js

我看了蜘蛛猴(Mozilla)和v8(谷歌),但这两个似乎都是嵌入式的。

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

如果有人好奇我为什么要研究这个问题,我一直在寻找node.js。 node.js的性能让我想知道javascript是否可以成为处理大数据的可行脚本语言。

13 个答案:

答案 0 :(得分:56)

主要答案

是的,为了回答您的问题,可以在没有浏览器的情况下从命令行使用JavaScript作为“常规”脚本语言。由于其他人尚未提及,我认为值得一提:

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

  • 安装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,也可用作alternative(在Debian-sense中)以提供{{1}可执行文件JIT编译是出于V8的提供而提供的。

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

因此,几乎没有编译,您将拥有三个重量级的JavaScript引擎。

附录

安装完成后,您只需使用jsc shebang行创建文件即可,而且操作正常:

#!/usr/bin/js

答案 1 :(得分:44)

我在这个主题上找到了这个related question,但是如果你想要直接链接,那么它们就是:

  • 您可以像其他人指出的那样安装Rhino。 This post显示了一种简单的启动和运行方式,以及如何对命令进行别名以轻松调用它
  • 如果您使用的是Mac,则可以使用JavaScriptCore,它会调用WebKit的JavaScript引擎。 Here's a post就可以了
  • 您也可以使用Chome / Google的V8解释器。 Here are instructions
  • 作为OSA的JavaScript非常有趣,因为它可以让您(AFAIK)与可编写脚本的OS X应用程序进行交互,就像使用AppleScript一样(没有可怕的语法)

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

由于您似乎对node.js感兴趣并且因为它基于V8,所以最好按照这些说明来设置V8环境,这样您就可以为JavaScript编程提供一致的基础(我希望JSC和V8大致相同,但我不确定。)

答案 2 :(得分:22)

我在iMac和

上安装了Node.js.
node somefile.js
bash中的

会起作用。

答案 3 :(得分:10)

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

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

从Windows 98开始,所有版本的Windows都包含了一个名为“The Windows Script Host”的内容。它是支持脚本“引擎”的Windows标准方式。自第一个版本发布以来,WSH支持JScript,微软的Javascript版本。除此之外,这意味着,从Windows命令行,您只需调用任何* .js文件的名称,它将在JScript引擎中运行。 (通过wscript.exe或cscript.exe)

  

您可以看到这个问题:What is the ProgId or CLSID for IE9's Javascript engine (code-named "Chakra")以了解如何从cscript.exe调用性能更高的IE9 Javascript引擎。

答案 4 :(得分:8)

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

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

在Java 1.6和1.7中,命令名为jrunscript(Windows上为jrunscript.exe),可以在JDK的bin文件夹中找到。

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

因此,在Java 1.8中,该命令被称为jjs(Windows上为jjs.exe

答案 5 :(得分:6)

FWIW,node.js附带一个shell,尝试输入:

node-repl

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

答案 6 :(得分:3)

您可以查看Rhino

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

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

答案 7 :(得分:3)

我知道这已经过时但你也应该尝试Zombie.js。无头浏览器,速度非常快,非常适合测试!

答案 8 :(得分:3)

我在命令行中使用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!' ]

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

答案 9 :(得分:2)

PhantomJS允许你这样做

http://phantomjs.org/

答案 10 :(得分:2)

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

  

Duktape是一个可嵌入的Javascript引擎,专注于可移植性和紧凑的占用空间。

祝你好运!

答案 11 :(得分:1)

JavaScript as OSA,这是一个扩展,提供JavaScript作为appleScript的替代品。大约10年前我一直在使用它,不知道它是否仍在使用当前的操作系统版本

答案 12 :(得分:1)

适用于Linux,Windows和Mac的

JSDB应该能够很好地满足要求。它使用Mozilla的Spidermonkey Javascript引擎,与node.js相比,安装起来似乎不那么麻烦(至少上次我几年前尝试过node.js)。

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