2008-09-03 119 views
31

用於調試和測試我正在尋找一個帶有自動完成功能的JavaScript shell,並且如果可能的話進行對象內省(比如ipython)。在線JavaScript Shell非常好,但我正在尋找本地的東西,而不需要瀏覽器。完成JavaScript交互式shell

到目前爲止,我已經測試了獨立的JavaScript解釋器犀牛,spidermonkey和谷歌V8。但他們都沒有完成。至少Rhino與jline和spidermonkey通過按鍵上/下有某種指令歷史記錄,但僅此而已。

有什麼建議嗎?

這個問題被再次問了here。它可能包含您正在尋找的答案。

回答

19

犀牛殼自1.7R2以來也支持完成。你可以找到更多的信息here

4

在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。

5

編輯:在使用節點REPL之後,我發現這個評估過於積極。它的實現存在一些嚴重的問題,包括無法抽出死亡的文本,編輯行數超過終端寬度的問題以及其他一些問題。只使用犀牛可能會更好。

node.jsREPLnode-repl在安裝有節點的系統上)是目前爲止我所見過的最好的基於終端的系統上下文shell。我將它與犀牛和內置的v8 shell進行比較。它提供製表符完成和行編輯歷史記錄,以及評估的語法着色。您還可以導入CommonJS模塊,或者至少導入由節點實現的模塊。

缺點是你必須建立節點。這不是什麼大問題,因爲構建應用程序可能會有所幫助,但如果您通常不這樣做,可能會遇到一些挑戰。

0

jslibs(獨立的javascript運行時)也適用於此目的。