Node.js REPL有趣的行为与自定义eval函数

看来,Node.js(版本v0.10.13)返回(\n)之间的命令,这是一个最小的例子:

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

行为如下:

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

这是为什么? 如果这个function被logging,那么我无法find它。

此外,如果这是预期的行为,有没有比做cmd = cmd.slice(1, -2);更好的解决schemecmd = cmd.slice(1, -2);

这个问题已经解决了(参见2013年8月的commit 9ef9a9de )。 现在只有JSONexpression式被包装成parens。

作为一种解决方法,您可以将stdinstream捕获到一个variables并使用它。 我认为节点这样做,因为用户input应该是一个JSexpression式,这是很好包裹在封闭()

 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); } });