在没有浏览器的情况下执行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可以让你做到这一点
我发现这个非常漂亮的开源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