2012-07-31 70 views
2

相关问题:Using the Underscore module with Node.js更改Node.js'REPL从下划线_返回值到其他?

有没有办法改变变量Node.js的REPL的最后一个返回值设置为?如果你可以从_改为__$_,然后你可以全球化下划线模块,因此您不必将它设置为一个变量中的每个文件:https://gist.github.com/3220108

+0

如果你这样做,你会不会有可能打破的模块使用下划线为本地REPL?如果你想为下划线设置一个全局变量,为什么不使用Node中尚未定义的值,比如你建议的双下划线或$ _? – 2012-07-31 21:01:09

回答

1

我不认为你可以改变_,除非你想编辑源文件。 node.js REPL似乎在lib/repl.js中实现;如果你捅库周围一点点,你会看到的东西like this

self.context._ = self.context[cmd] = lib; 
self.outputStream.write(self.writer(lib) + '\n'); 

like this

self.context._ = ret; 
self.outputStream.write(self.writer(ret) + '\n'); 

self.context对象是REPL全球范围内或命名空间(在一个类似window浏览器),所以self.context._ = ret;等同于REPL提示中的_ = ret

所以_是硬连线的,除非你想破解node.js库,否则你无能为力。

3

我想出了一种使用本地节点repl模块来完成此操作的方法。而不是仅仅在命令行中运行node,把这个像console.js,然后运行node console.js

var repl = require('repl') 
var vm = require('vm'); 

var _; 

var server = repl.start({ 
    eval: function (cmd, context, filename, callback) { 
    try { 
     var match = cmd.match(/^\((.*)\n\)$/); 
     var code = match ? match[1] : cmd; 
     context._ = _; 
     var result = vm.runInThisContext(code, filename); 
    } catch (error) { 
     console.log(error.stack); 
    } finally { 
     _ = context._; 
     callback(null, result); 
    } 
    } 
}).on('exit', function() { 
    process.exit(0); 
}); 

这里的要点是:https://gist.github.com/jasoncrawford/6818650