誰かが既存のnode.jsREPLを使用して自分のためにこのようなものを設定しましたか?私はそれを行うための迅速な方法を考えていませんでした。
私が今日それをする方法はemacsとこれを使うことです: https ://github.com/ivan4th/swank-js
このモジュールは次のもので構成されています。
emacsへのSLIME-jsアドオンは、js2-modeと組み合わせて、関数defの本体のどこかにCMxを発行するだけで、関数の文字列を.に送信します。
Node.jsで記述されたSwank-jsサーバー(はい、ローカルマシンからリモートプロセスに直接評価できます)-評価した関数の文字列を受け取り、実際に評価します
ブラウザを使用してそのサーバーの別のポートに接続し、そのブラウザでDOMを操作できるようにする全体(これは非常に素晴らしいですが、関連性はありません)
私のソリューションはemacs側でSLIME-jsを使用しており、app.jsファイルにrequire('swank-js')があります
今..私は私の解決策または他の可能なものに関していくつかの問題と質問があります:
Q1:これはやり過ぎですか?誰かがnanoから彼のライブプロセスにものを評価する秘密の方法を持っていますか?
Q2:swank-jsの評価方法を変更する必要がありました。次のような黒魔術を使用しました。
var Script = process.binding('evals').Script;
var evalcx = Script.runInContext;
....
this.context = Script.createContext();
for (var i in global) this.context[i] = global[i];
this.context.module = module;
this.context.require = require;
...
r = evalcx("CODECODE", this.context, "repl");
私が理解している限り、これはグローバル変数を新しいコンテキストにコピーするだけであり、evalを実行しても、元の関数定義は変更されません-SOOO..私は単純な「eval」とITWORKSを使用しています。
これについて何かコメントはありますか?
Q3:関数を再評価するには、それがGLOBAL関数である必要があります-すべての関数定義をグローバル(clojureのような)として持つのは悪い習慣ですか?これを行う別の方法があると思いますか?