回答:
あなたが説明したとおりの機能を提供するための組み込み機能はまだありません。ただし、REPL内でコマンドrequireを使用するための、.load次のような代替手段:
.load foo.jsREPLで入力した場合と同じように、ファイルを1行ずつロードします。これとは異なりrequire、ロードしたコマンドでREPL履歴を汚染します。ただし、のようにキャッシュされないため、繰り返し可能という利点がありrequireます。
どちらが適しているかは、ユースケースによって異なります。
編集:それはstrictモードで作業をしないためには、限られた適用性を持っていますが、3年後に、私はあなたのスクリプトが持っていない場合、ことを学んだ'use strict'、あなたがすることができます使用してevalスクリプトを読み込むために REPL履歴を汚染せずに:
var fs = require('fs');
eval(fs.readFileSync('foo.js').toString())私はいつもこのコマンドを使います
node -i -e "$(< yourScript.js)"パッケージなしでPythonとまったく同じように動作します。
私はVorpal.jsを作成しました。これは、ノードの追加をインタラクティブCLIに変えることでこの問題を処理します。実行中のアプリのコンテキスト内でREPLにドロップするREPL拡張機能をサポートしています。
var vorpal = require('vorpal')();
var repl = require('vorpal-repl');
vorpal
  .delimiter('myapp>')
  .use(repl)
  .show()
  .parse(process.argv); その後、アプリを実行すると、REPLにドロップされます。
$ node myapp.js repl
myapp> repl: 別の方法は、それらの関数をグローバルとして定義することです。
global.helloWorld = function() { console.log("Hello World"); }次に、REPLにファイルをプリロードします。
node -r ./file.js次に、helloWorldREPLで関数に直接アクセスできます。
スクリプトを繰り返しリロードするのに飽きたのでreplpadを作成しました。
単にそれを介してそれをインストールしてください: npm install -g replpad
次に、次のコマンドを実行して使用します。 replpad
現在およびすべてのサブディレクトリ内のすべてのファイルを監視し、それらが変更されたときにそれらをreplにパイプする場合: replpad .
それがどのように機能するかについてより良い考えを得るためにサイト上のビデオをチェックして、それがこれらのようなある他のいくつかの素晴らしい機能について学ぶ:
dox()すべてのコア関数に追加される関数を介してreplのコアモジュールドキュメントにアクセスします。fs.readdir.dox()dox()npmを介してインストールされたすべてのモジュールに追加される関数を介してreplのユーザーモジュールreadmeにアクセスしますmarked.dox()srcます。express.logger.src.talkコマンドを参照).appendコマンドを使用して、replに入力されたコードをファイルに追加しますCXX=clang++ npm install replpadエラーを回避しなければなりg++: error: unrecognized command line option '-stdlib=libc++'
                    # # Fatal error in ../deps/v8/src/api.cc, line 1248 # Check failed: !value_obj->IsJSReceiver() || value_obj->IsTemplateInfo(). # Illegal instruction: 4
                    ファイルをインタラクティブノードreplにロードしないのはなぜですか?
node -h
-e, --eval script          evaluate script
-i, --interactive          always enter the REPL even if stdin
node -e 'var client = require("./build/main/index.js"); console.log("Use `client` in repl")' -i次に、package.jsonスクリプトに追加できます
"repl": "node -e 'var client = require(\"./build/main/index.js\"); console.log(\"Use `client` in repl\")' -i",ノードv8.1.2を使用してテスト済み
node -i -r "./build/main/index.js"?
                    現在、それを直接行うことはできませんがmylib = require('./foo.js')、REPLで行うことができます。メソッドはグローバルとして宣言されずにエクスポートされることに注意してください。
.load my_work.jsいくつかの追加のexports.working_var = ...宣言が必要ですが、REPLが複数行のコメントなどの完全に有効なjavascriptの少なくとも一部をreadline構成しているため(少なくとも私の構成では)、これよりも好ましいと思います。
                    replpad クールですが、ファイルをノードにロードし、その変数をインポートしてreplを開始する迅速かつ簡単な方法として、.jsファイルの最後に次のコードを追加できます
if (require.main === module){
    (function() {
        var _context = require('repl').start({prompt: '$> '}).context;
        var scope = require('lexical-scope')(require('fs').readFileSync(__filename));
        for (var name in scope.locals[''] )
            _context[scope.locals[''][name]] = eval(scope.locals[''][name]);
        for (name in scope.globals.exported)
            _context[scope.globals.exported[name]] = eval(scope.globals.exported[name]);
    })();
}ファイルがの場合src.js、実行node src.jsするとノードが開始され、ファイルがロードされ、REPLが開始さvarれ、最上位として宣言されているすべてのオブジェクトとエクスポートされたグローバルがコピーされます。if (require.main === module)場合は、このコードが実行されないことを保証しsrc.jsて含まれているrequire声明。実際、src.jsスタンドアロンで実行しているときに、ifステートメント内でデバッグ目的で実行するコードを追加できます。
古い答え
type test.js|node -iノードREPLを開き、test.jsからREPLにすべての行を入力しますが、何らかの理由でノードはファイルの終了後に終了します
もう1つの問題は、その機能が巻き上げられないことです。
node -e require('repl').start({useGlobal:true}); -r ./test2.js次に、test2.js内でvarなしで宣言されたすべてのグローバルがREPLで使用可能になります
グローバルスコープの変数aが使用できない理由がわからない