135

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

$ javascript my_javascript_code.js

我研究了蜘蛛猴 (Mozilla) 和 v8 (Google),但它们似乎都是嵌入的。

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

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

4

13 回答 13

60

主要答案

是的,要回答您的问题,可以在命令行中使用 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作为替代方案(在 Debian 意义上)提供js可执行文件。JIT 编译是由 V8 提供的。

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

因此,几乎不需要编译,您将拥有三个重量级的 JavaScript 引擎供您使用。

附录

一旦你安装了东西,你可以简单地使用#!/usr/bin/jsshebang 行创建文件,一切都会正常工作:

$ 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!
$
于 2012-02-12T01:00:24.223 回答
47

我在这个主题上找到了这个相关的问题,但如果你想要直接链接,它们是:

  • 正如其他人指出的那样,您可以安装 Rhino。这篇文章展示了一种启动和运行它的简单方法,以及如何给命令起别名以轻松调用它
  • 如果您使用的是 Mac,则可以使用 JavaScriptCore,它调用 WebKit 的 JavaScript 引擎。这是一个关于它的帖子
  • 您也可以使用 Chome/Google 的 V8 解释器。以下是说明
  • 作为 OSA 的 JavaScript 很有趣,因为它让您 (AFAIK) 与可编写脚本的 OS X 应用程序进行交互,就好像您在 AppleScript 中一样(没有糟糕的语法)

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

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

于 2010-05-31T05:12:59.253 回答
23

我已经在 iMac 上安装了 Node.js,并且

node somefile.js

在 bash 中将起作用。

于 2012-10-01T09:38:06.913 回答
13

我知道你问过 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引擎。

于 2011-09-15T16:24:59.907 回答
9

由于没有人提到它:从 Java 1.6 开始,Java JDK 还捆绑了 JavaScript 命令行和 REPL。

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

在 Java 1.6 和 1.7 中,该命令被调用jrunscriptjrunscript.exe在 Windows 上)并且可以在 JDK 的 bin 文件夹中找到。

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

所以在 Java 1.8 中,该命令被调用jjsjjs.exe在 Windows 上)

于 2013-08-23T22:02:30.767 回答
6

FWIW,node.js 带有一个外壳,尝试输入:

node-repl

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

于 2010-05-31T05:38:35.570 回答
4

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

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

于 2014-01-08T08:19:45.317 回答
3

你可能想看看Rhino

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

java org.mozilla.javascript.tools.shell.Main my_javascript_code.js [args]
于 2010-05-31T04:52:22.743 回答
3

我知道这很旧,但您也应该尝试Zombie.js。一个无头浏览器,速度非常快,非常适合测试!

于 2011-04-23T08:07:19.027 回答
2

PhantomJS 也允许你这样做

http://phantomjs.org/

于 2014-08-07T18:13:24.877 回答
2

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

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

祝你好运!

于 2015-02-11T15:02:14.603 回答
1

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

于 2010-05-31T04:55:02.580 回答
1

JSDB可用于 Linux、Windows 和 Mac 应该非常适合。它使用 Mozilla 的 Spidermonkey Javascript 引擎,与 node.js 相比,安装起来似乎更轻松(至少几年前我上次尝试 node.js 时)。

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

于 2015-03-02T19:17:20.180 回答