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。
作为一种解决方法,您可以将stdin
stream捕获到一个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); } });