防止打印输出的Node.js repl

如果一些JavaScript计算的结果是一个10000个元素的数组,Node.js repl会打印出来。 我如何防止这样做?

谢谢

你为什么不追加; null; ; null; 你的表情?

如在

 new Array(10000); null; 

打印

 null 

甚至更短,使用;0;

将结果赋给一个用var声明的variables。 var语句总是返回undefined

 > new Array(10) [ , , , , , , , , , ] > var a = new Array(10) undefined 

节点使用inspect来格式化返回值。 用一个只返回一个空string的函数replaceinspect,它不会显示任何东西。

require('util').inspect = function () { return '' };

你可以自己开始REPL,改变任何让你烦恼的事情。 例如,你可以告诉它,当一个expression式没有结果时,不要打印undefined 。 或者你可以包装expression式的评估,并阻止它们返回结果。 如果你同时做了这两件事情,那么你将REPL有效地减less到REL:

 node -e "var vm = require('vm'); require('repl').start({ignoreUndefined: true, eval: function(cmd, ctx, fn, cb) {var err = null; try {vm.runInContext(cmd, ctx, fn);} catch (e) {err = e;} cb(err);}})" 

我已经在这个问题的评论中说过,你可能想把你的命令的执行包装在一个匿名函数中。 假设你有一些重复的过程返回某种结果。 喜欢这个:

 var some_array = [1, 2, 3]; some_array.map(function(){ // It doesn't matter what you return here, even if it's undefined // it will still get into the map and will get printed in the resulting map return arguments; }); 

这给了我们这个输出:

 [ { '0': 1, '1': 0, '2': [ 1, 2, 3 ] }, { '0': 2, '1': 1, '2': [ 1, 2, 3 ] }, { '0': 3, '1': 2, '2': [ 1, 2, 3 ] } ] 

但是,如果将map方法调用包装为自调用匿名函数,则所有输出都将丢失:

 (function(){ some_array.map(function() { return arguments; }); })(); 

这段代码将得到这个输出:

 undefined 

因为匿名函数不返回任何东西。