首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带补全的JavaScript交互式外壳

带补全的JavaScript交互式外壳
EN

Stack Overflow用户
提问于 2008-09-03 05:27:19
回答 6查看 21.7K关注 0票数 31

为了调试和测试,我正在搜索一个具有自动完成功能和对象自省功能的JavaScript外壳(比如ipython)。在线JavaScript Shell真的很好,但我想找一些本地的,不需要浏览器的东西。

到目前为止,我已经测试了独立的JavaScript解释器rhino、spidermonkey和google V8。但它们都还没有完成。至少Rhino和jline和蜘蛛猴有一些通过向上/向下键的命令历史,但仅此而已。

有什么建议吗?

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-04-14 11:03:50

Rhino Shell从1.7R2开始也支持完成。你可以在here上找到更多信息。

票数 19
EN

Stack Overflow用户

发布于 2009-11-28 20:25:23

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

代码语言:javascript
复制
// 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“中:

代码语言:javascript
复制
<job>
    <reference object="Scripting.FileSystemObject" />
    <script language="JavaScript" src="util.js" />
    <script language="JavaScript" src="shell.js" />
</job>

...where util.js是:

代码语言:javascript
复制
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); };

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

票数 5
EN

Stack Overflow用户

发布于 2010-11-02 08:55:54

编辑:在使用了更多的节点REPL之后,我发现这个评估过于积极了。它的实现有一些严重的问题,包括无法拖出取消的文本,编辑行长于终端宽度的问题,以及其他一些问题。使用rhino可能会更好。

node.js REPL (安装了节点的系统上的node-repl)是迄今为止我见过的最好的基于终端的系统上下文shell。我把它比作rhino和内置的v8外壳。它提供制表符完成和行编辑历史,以及评估的语法着色。您还可以导入CommonJS模块,或者至少导入那些由节点实现的模块。

缺点是你必须构建节点。就构建应用程序而言,这并不是什么大问题,但如果你不经常做这样的事情,这可能是一个挑战。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档