相关问题:Using the Underscore module with Node.js更改Node.js'REPL从下划线_返回值到其他?
有没有办法改变变量Node.js的REPL的最后一个返回值设置为?如果你可以从_
改为__
或$_
,然后你可以全球化下划线模块,因此您不必将它设置为一个变量中的每个文件:https://gist.github.com/3220108
相关问题:Using the Underscore module with Node.js更改Node.js'REPL从下划线_返回值到其他?
有没有办法改变变量Node.js的REPL的最后一个返回值设置为?如果你可以从_
改为__
或$_
,然后你可以全球化下划线模块,因此您不必将它设置为一个变量中的每个文件:https://gist.github.com/3220108
我不认为你可以改变_
,除非你想编辑源文件。 node.js REPL似乎在lib/repl.js
中实现;如果你捅库周围一点点,你会看到的东西like this:
self.context._ = self.context[cmd] = lib;
self.outputStream.write(self.writer(lib) + '\n');
self.context._ = ret;
self.outputStream.write(self.writer(ret) + '\n');
的self.context
对象是REPL全球范围内或命名空间(在一个类似window
浏览器),所以self.context._ = ret;
等同于REPL提示中的_ = ret
。
所以_
是硬连线的,除非你想破解node.js库,否则你无能为力。
我想出了一种使用本地节点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);
});
如果你这样做,你会不会有可能打破的模块使用下划线为本地REPL?如果你想为下划线设置一个全局变量,为什么不使用Node中尚未定义的值,比如你建议的双下划线或$ _? – 2012-07-31 21:01:09