Интерактивная оболочка JavaScript с завершением

Для отладки и тестирования я ищу оболочку JavaScript с автоматическим завершением и, если возможно, интроспекцией объекта (например, ipython). В режиме онлайн JavaScript Shell действительно приятно, но я ищу что-то локальное, без необходимости в браузере.

До сих пор я тестировал автономный JavaScript-интерпретатор rhino, spidermonkey и google V8. Но ни один из них не имеет завершения. По крайней мере, Rhino с jline и spidermonkey имеют некоторую историю команд с помощью клавиши вверх/вниз, но не более того.

Любые предложения?

Этот вопрос был задан снова здесь. Он может содержать ответ, который вы ищете.

Ответ 1

Rhino Shell с 1.7R2 также поддерживает завершение. Вы можете найти более подробную информацию здесь.

Ответ 2

изменить: после использования node REPL немного больше, я обнаружил, что эта оценка является слишком положительной. Есть некоторые серьезные проблемы с его реализацией, в том числе невозможность выдернуть убитый текст, проблемы с редакционными строками, длиннее ширины терминала, и некоторые другие проблемы. Возможно, лучше использовать носорог.

node.js REPL (node-repl в системе с установленным node) - лучшая терминальная системная оболочка, которую я видел до сих пор. Я сравниваю его с носорогом и встроенной оболочкой v8. Он предоставляет историю завершения и истории редактирования строк, а также синтаксическую раскраску оценок. Вы также можете импортировать CommonJS модули или, по крайней мере, те модули, которые реализованы с помощью node.

Даунсайд - это то, что вам нужно построить node. Это не огромная сделка, поскольку создание приложений идет, но может быть проблемой, если вы обычно не делаете такие вещи.

Ответ 3

В Windows вы можете запустить этот файл из командной строки в cscript.exe и предоставить простую интерактивную оболочку. Не завершено.

// 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 из командной строки.

Ответ 4

Не Rhino Shell, что вы ищете?

Ответ 6

jslibs (автономное время выполнения javascript) также может быть подходящим для этой цели.