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

新手上路,请多包涵

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

$ javascript my_javascript_code.js

我查看了 spider monkey (Mozilla) 和 v8 (Google),但它们似乎都是嵌入式的。

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

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

原文由 Daniel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 466
2 个回答

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

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

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

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

原文由 jasonmp85 发布,翻译遵循 CC BY-SA 3.0 许可协议

主要答案

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

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

  • 安装 libmozjs-78-0 包,它将在命令行上为您提供 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-4.0-bin 并使用 WebKit 的 JavaScriptCore 解释器 ( jsc ) 作为命令行中的常规解释器。而且这不需要访问 Mac。在许多平台上(例如,x86 和 x86_64),这个解释器将带有一个 JIT 编译器。

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

附录

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

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

旧版本:

libmozjs-24-binlibmozjs-52libmozjs-60libmozjs-91libjavascriptcoregtk-3.0-bin

原文由 rbrito 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题