【问题标题】:Changing Node.js' REPL return value from underscore _ to something else?将 Node.js 的 REPL 返回值从下划线 _ 更改为其他值?
【发布时间】:2012-07-31 20:20:37
【问题描述】:

相关问题:Using the Underscore module with Node.js

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

【问题讨论】:

  • 如果你这样做了,你不会破坏那些使用下划线来表示本机 REPL 的模块吗?如果您想为下划线设置全局,为什么不使用 Node 中尚未定义的值,例如您建议的双下划线或 $_?

标签: javascript node.js underscore.js read-eval-print-loop


【解决方案1】:

我想出了一种使用本机 Node 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

【讨论】:

    【解决方案2】:

    我认为你不能更改_,除非你想编辑源代码。 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 库,否则你无能为力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多