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

IT技术 javascript unix command-line scripting v8
2021-01-18 20:47:27

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

$ javascript my_javascript_code.js

我查看了蜘蛛猴 (Mozilla) 和 v8 (Google),但它们似乎都被嵌入了。

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

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

6个回答

主要答案

是的,要回答您的问题,可以从命令行使用 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-binjsc从命令行使用 WebKit 的 JavaScriptCore 解释器 ( ) 作为常规解释器。这是不需要访问 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!
$

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

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

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

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

Chrome/Google V8 解释器链接正是我要找的!谢谢!
2021-03-24 20:47:27
在 Ubuntu 上使用 nodejs v0.10.25nodejs在终端中输入可以访问 REPL。
2021-03-25 20:47:27
0.1.101 中的 NodeJS 有一个 node-repl,它使您可以通过 CLI 访问环境。它非常适合测试/学习 JS。
2021-03-30 20:47:27
以上哪些(如果有)包含 HTML DOM?
2021-04-08 20:47:27

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

node somefile.js

在 bash 中会起作用。

对我来说是nodejs somefile.js因为我安装了 nodejs 包
2021-03-24 20:47:27
我的天啊!@aw04 绝对
2021-04-06 20:47:27
这是 2019 年的正确答案。 Node.JS 永远是最普遍、最简单的方式。
2021-04-11 20:47:27

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

它基于 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 上)