代码之家  ›  专栏  ›  技术社区  ›  Srikanth

完成的javascript交互shell

  •  31
  • Srikanth  · 技术社区  · 16 年前

    对于调试和测试,我正在搜索一个自动完成的JavaScript外壳,如果可能的话,还将搜索对象内省(如IPython)。在线 JavaScript Shell 很不错,但是我在找本地的东西,不需要浏览器。

    到目前为止,我已经测试了独立的JavaScript解释器Rhino、Spidermonkey和GoogleV8。但它们都没有完成。至少犀牛与jline和蜘蛛猴有某种命令历史通过键向上/向下,但没有更多。

    有什么建议吗?

    这个问题又被问到了 here . 它可能包含您正在寻找的答案。

    6 回复  |  直到 10 年前
        1
  •  19
  •   Martin Lazar    16 年前

    Rhino Shell自1.7R2起也支持完成。你可以找到更多的信息 here .

        2
  •  5
  •   Cheeso    15 年前

    在Windows中,可以从cscript.exe中的命令提示符运行此文件,它提供了一个简单的交互式shell。没有完成。

    // shell.js
    // ------------------------------------------------------------------
    //
    // implements an interactive javascript shell.
    //
    // from
    // http://kobyk.wordpress.com/2007/09/14/a-jscript-interactive-interpreter-shell-for-the-windows-script-host/
    //
    // Sat Nov 28 00:09:55 2009
    //
    
    var GSHELL = (function () {
    
        var numberToHexString = function (n) {
            if (n >= 0) {
                return n.toString(16);
            } else {
                n += 0x100000000;
                return n.toString(16);
            }
        };
        var line, scriptText, previousLine, result;
    
        return function() {
            while(true) {
                WScript.StdOut.Write("js> ");
                if (WScript.StdIn.AtEndOfStream) {
                    WScript.Echo("Bye.");
                    break;
                }
                line = WScript.StdIn.ReadLine();
                scriptText = line + "\n";
                if (line === "") {
                    WScript.Echo(
                        "Enter two consecutive blank lines to terminate multi-line input.");
                    do {
                        if (WScript.StdIn.AtEndOfStream) {
                            break;
                        }
                        previousLine = line;
                        line = WScript.StdIn.ReadLine();
                        line += "\n";
                        scriptText += line;
                    } while(previousLine != "\n" || line != "\n");
                }
                try {
                    result = eval(scriptText);
                } catch (error) {
                    WScript.Echo("0x" + numberToHexString(error.number) + " " + error.name + ": " +
                                 error.message);
                }
                if (result) {
                    try {
                        WScript.Echo(result);
                    } catch (error) {
                        WScript.Echo("<<>>");
                    }
                }
                result = null;
            }
        };
    })();
    
    GSHELL();
    

    如果需要,可以使用其他实用程序库和.wsf文件来扩充它。将以上内容保存到“shell.js”,并将以下内容保存到“shell.wsf”:

    <job>
        <reference object="Scripting.FileSystemObject" />
        <script language="JavaScript" src="util.js" />
        <script language="JavaScript" src="shell.js" />
    </job>
    

    …其中util.js是:

    var quit = function(x) { WScript.Quit(x);}
    var say = function(s) { WScript.Echo(s); };
    var echo = say;
    var exit = quit;
    var sleep = function(n) { WScript.Sleep(n*1000); };
    

    …然后从命令行运行shell.wsf。

        3
  •  5
  •   intuited    14 年前

    编辑 :在使用了node repl之后,我发现这个评估过于积极。它的实现存在一些严重的问题,包括无法提取已删除的文本、编辑行长度超过终端宽度的问题以及其他一些问题。只使用犀牛可能更好。

    这个 node.js REPL ( node-repl 在安装了节点的系统上)是迄今为止我见过的最好的基于终端的系统上下文shell。我把它比作犀牛和内置的V8引擎外壳。它提供选项卡完成和行编辑历史记录,以及评估的语法着色。您也可以导入 CommonJS 模块,或者至少那些由节点实现的模块。

    缺点是您必须构建节点。正如构建应用程序所说,这不是一个大问题,但如果你平时不做这些事情,这可能是一个挑战。

        4
  •  2
  •   Jasper    16 年前

    不是 Rhino Shell 你在找什么?

        5
  •  1
  •   Sam Hasler zpesk    16 年前

    This post 约翰·雷西格说 Tamarin (Firefox 4?) JavaScriptCore (Safari 3) . 不过,我不确定它们是否有自动完成功能。

        6
  •  0
  •   Franck Freiburger    14 年前

    jslibs (一个独立的JavaScript运行时)也可以用于此目的。