2012-07-31 28 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