【问题标题】:Executing JavaScript without a browser?在没有浏览器的情况下执行 JavaScript?
【发布时间】:2010-05-31 04:48:32
【问题描述】:

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

$ javascript my_javascript_code.js

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

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

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

【问题讨论】:

  • node.js 不是 javascript 命令行解释器吗?
  • node.js 不是解释器,它是一个基于 Google 的 V8 javascript 实现的异步框架。虽然我相信 V8 的 javascript intererpter 包含在节点安装中
  • 如果 V8 的 CLI 解释器变得流行起来,它可能是一个非常好的教学工具。我认为学习用 JavaScript 编程可能会很有趣。 Lua 可能真的是最好的选择(JS 的“类”让每个人都感到困惑),但是 JS 被扔到网络上的能力会吸引修补匠。我可以自己试试这个 V8 CLI。
  • @jasonmp85 使用 new 关键字执行函数会构建对象实例。当您在实例上引用属性/方法时,如果对象本身没有它,则检查构造函数的原型属性。将此用于公共方法并定义构造函数的本地变量以有效地获取私有方法/道具(这些在技术上是闭包引用变量)。结束。
  • Node 可以做到这一点,但 Deno 更易于安装,并且允许您通过 url 而不是节点模块导入包。见deno.land

标签: javascript unix command-line scripting v8


【解决方案1】:

主要答案

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

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

  • 安装libmozjs-24-bin 包,它将在命令行上为您提供Mozilla 的Spidermonkey 引擎,作为简单的js24,它也可以用作交互式解释器。 (名称中的24表示对应火狐24版)。

  • 安装 libv8-dev 包,它将为您提供 Google 的 V8 引擎。作为示例之一,它具有文件/usr/share/doc/libv8-dev/examples/shell.cc.gz,您可以非常简单地解压缩和编译它(例如g++ -Os shell.cc -o shell -lv8)。

  • 安装包nodejs,它将作为可执行文件nodejsalternative(在Debian 意义上)提供js 可执行文件。 JIT 编译是由 V8 提供的。

  • 安装包libjavascriptcoregtk-3.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!
$

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • Chrome/Google V8 解释器链接正是我想要的!谢谢!
    • 0.1.101 中的 NodeJS 有一个 node-repl,它可以让你通过 CLI 访问环境。非常适合测试/学习 JS。
    • 在 Ubuntu 上使用 nodejs v0.10.25 在终端输入 nodejs 可以访问 REPL。
    • 以上哪一项(如果有)包括 HTML DOM?
    【解决方案3】:

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

    node somefile.js
    

    在 bash 中会起作用。

    【讨论】:

    • 天啊! @aw04 绝对
    • 对我来说是nodejs somefile.js,因为我已经安装了nodejs包
    • 这是 2019 年的正确答案。Node.JS 始终是最普遍、最简单的方法。
    【解决方案4】:

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

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

    所有版本的 Windows,从 Windows 98 开始,都包含一个叫做“The Windows Script Host”的东西。这是支持脚本“引擎”的 Windows 标准方式。从第一个版本开始,WSH 就支持 JScript,即 Microsoft 的 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 引擎。

    【讨论】:

      【解决方案5】:

      由于没有人提到它:从 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

      【讨论】:

        【解决方案6】:

        FWIW,node.js自带shell,试试输入:

        node-repl
        

        一旦你安装了 node.js 就可以看到它的实际效果。安装 rlwrap 以使其正常工作是非常标准的。

        【讨论】:

        • 我发现 node-repl 和使用 hash-bang 都非常适合快速使用 NodeJS 的程序。它快速且易于使用。
        【解决方案7】:

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

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

        【讨论】:

          【解决方案8】:

          您可能想查看Rhino

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

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

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

              PhantomJS 也允许你这样做

              http://phantomjs.org/

              【讨论】:

                【解决方案11】:

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

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

                祝你好运!

                【讨论】:

                  【解决方案12】:

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

                  【讨论】:

                    【解决方案13】:

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

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

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2010-11-17
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2014-03-20
                      相关资源
                      最近更新 更多