2008-09-03 3 views
31

디버깅 및 테스트 자동 완료 기능이있는 자바 스크립트 셸과 가능한 경우 개체 내성 검사 (예 : ipython)를 검색하고 있습니다. 온라인 JavaScript Shell은 정말 좋지만 브라우저가 필요없는 로컬 무언가를 찾고 있습니다.완성 된 JavaScript 대화 형 셸

지금까지 독립형 JavaScript 인터프리터 인 rhino, spidermonkey 및 google V8을 테스트했습니다. 그러나 어느 누구도 완수하지 못했습니다. 적어도 Jline과 Spidermonkey가있는 Rhino에는 키 업/다운을 통한 일종의 명령이 있지만 그 이상의 것은 없습니다.

제안 사항?

이 질문을 다시 묻는 질문에 here. 찾고있는 대답이있을 수 있습니다.

답변

19

Rhino Shell 이후 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 (독립 실행 형 자바 스크립트 런타임)도이 목적에 적합 할 수 있습니다.