对于调试和测试,我正在搜索具有自动完成功能的JavaScript shell,如果可能的话,还会搜索对象内省(如ipython).在线JavaScript Shell非常好,但我正在寻找一些本地的东西,而不需要浏览器.
到目前为止,我已经测试了独立的JavaScript解释器rhino,spidermonkey和google V8.但他们都没有完成.至少带有jline和spidermonkey的Rhino通过键向上/向下具有某种命令历史,但仅此而已.
有什么建议?
这个问题在这里再次被问到.它可能包含您正在寻找的答案.
自1.7R2以来,Rhino Shell也支持完成.您可以在此处找到更多信息.
在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":
...其中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.
编辑:在使用节点REPL之后,我发现这个评估过于积极.它的实现存在一些严重的问题,包括无法抽取被杀文本,编辑长度超过终端宽度的问题以及其他一些问题.使用rhino可能更好.
所述的node.js REPL(node-repl
与安装的节点的系统上)是最好的基于终端的,系统上下文壳到目前为止我见过.我将它与rhino和内置的v8 shell进行比较.它提供了制表符完成和行编辑历史记录,以及评估的语法着色.您还可以导入CommonJS模块,或至少导入由节点实现的模块.
缺点是你必须建立节点.这不是一个大问题,因为构建应用程序,但如果你通常不做这样的事情可能是一个挑战.