相關問題: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