Node.js使用自定义eval函数REPL搞笑行为

时间:2013-10-04 13:10:16

标签: javascript node.js read-eval-print-loop

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

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

行为如下:

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

为什么?如果此功能documented,那么我无法找到它。

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

2 个答案:

答案 0 :(得分:1)

问题已经解决(请参阅2013年8月的commit 9ef9a9de)。现在只有JSON表达式包含在parens中。

答案 1 :(得分:0)

作为一种解决方法,您可以将stdin流捕获到变量并改为使用它。我认为node是这样做的,因为用户输入应该是一个js表达式,这很好地包含在闭包()中。

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