2008-09-03 11 views
31

デバッグとテストのために私は自動補完と、可能であればオブジェクトのイントロスペクション(ipythonのような)を備えたJavaScriptシェルを探しています。オンラインJavaScript Shellは本当にいいですが、私はブラウザを必要とせずに、ローカルなものを探しています。完成したJavaScript対話シェル

これまでのところ、スタンドアロンのJavaScriptインタプリタrhino、spidermonkey、google V8をテストしました。しかしどちらも完成していません。少なくともjlineとspidermonkeyを持つRhinoは、キーアップ/ダウンを介して何らかの種類のコマンド履歴を持っていますが、これ以上のものはありません。

提案がありますか?

この質問はもう一度hereと尋ねました。それはあなたが探している答えを含んでいるかもしれません。

答えて

19

Rhinoシェルは1.7R2以降も同様にサポートしています。詳細はhereをご覧ください。

4

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をコマンドラインから実行します。

5

編集:ノードREPLをもう少し使用した後、私はこの評価が非常に肯定的であることを発見しました。殺害されたテキストを取り除くことができないこと、端末の幅よりも長い行を編集することなどの問題、その他いくつかの問題を含む、実装に重大な問題がいくつかあります。ちょうどライノを使うほうがいいかもしれません。

node.jsREPL(ノードがインストールされているシステムではnode-repl)はこれまでに見た端末ベースのシステム・コンテキスト・シェルとして最適です。私はそれをrhinoと組み込みのv8シェルと比較しています。タブ補完とライン編集履歴、および評価のシンタックスカラーリングを提供します。 CommonJSモジュール、または少なくともノードによって実装されたモジュールをインポートすることもできます。

欠点は、ノードを構築する必要があることです。これは大きな問題ではありません。アプリをビルドするのは大変ですが、通常はそうしないと難しいかもしれません。

0

jslibs(スタンドアロンのjavascriptランタイム)もこの目的に適しています。

関連する問題