2

関連する質問: Node.js で Underscore モジュールを使用する

Node.jsのREPLが最後の戻り値を設定する変数を変更する方法はありますか? _から__またはに変更できる場合は$_、アンダースコアモジュールをグローバル化して、すべてのファイルで変数に設定する必要がないようにすることができます: https://gist.github.com/3220108

4

2 に答える 2

3

replネイティブ Nodeモジュールを使用してこれを行う方法を見つけました。コマンドラインで実行するだけでなく、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

于 2013-10-03T23:39:33.503 に答える
1

_ソースを編集したくない限り変更できないと思います。node.js REPL は に実装されているようlib/repl.jsです。ライブラリを少し調べてみると、次のようなものが表示されます。

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

そしてこのように

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

オブジェクトは、REPLのself.contextグローバル コンテキストまたは名前空間 (windowブラウザーと同様) であるため、REPL のプロンプトからself.context._ = ret;言うのと同じです。_ = ret

これ_はハードワイヤードであり、node.js ライブラリをハックしたい場合を除き、それについてできることは何もありません。

于 2012-08-01T02:28:28.947 に答える