2013-10-04 8 views
5

Es scheint, dass Node.js (Version v0.10.13) gibt den Befehl eingewickelt zwischen ( und \n), hier ist ein minimales Beispiel:Node.js REPL lustig Verhalten mit benutzerdefinierten Funktion eval

require('repl').start({ 
    'eval': function (cmd, context, filename, callback) { 
     callback(null, cmd); 
    } 
}); 

Das Verhalten ist folgende:

$ node repl.js 
> asd 
'(asd\n)' 
> 

Warum ist das? Wenn dieses Feature ist documented dann konnte ich es nicht finden.

Auch, wenn dies das beabsichtigte Verhalten ist, gibt es eine bessere Lösung als cmd = cmd.slice(1, -2); zu tun?

Antwort

1

Das Problem ist bereits behoben (siehe commit 9ef9a9de von Aug 2013). Jetzt ist nur der JSON-Ausdruck in Parens eingebettet.

+0

In der instabilen Version behoben. – cYrus

0

Als Workaround können Sie stdin Stream in eine Variable erfassen und stattdessen verwenden. Ich denke, Knoten tut es, weil die Benutzereingabe ein js Ausdruck sein soll, der gut ist, in den Abschluss () eingewickelt zu werden.

var buffer = ''; 

process.stdin.on('data', function(chunk) { 
    buffer += chunk.toString('utf8'); 
}); 

require('repl').start({ 
    input: process.stdin, 
    output: process.stdout, 
    'eval': function (cmd, context, filename, callback) { 
     console.log(buffer); 
     buffer = ''; 
     callback(null, true); 
    } 
});