16

誰かが既存のnode.jsREPLを使用して自分のためにこのようなものを設定しましたか?私はそれを行うための迅速な方法を考えていませんでした。

私が今日それをする方法はemacsとこれを使うことです: https ://github.com/ivan4th/swank-js

このモジュールは次のもので構成されています。

  1. emacsへのSLIME-jsアドオンは、js2-modeと組み合わせて、関数defの本体のどこかにCMxを発行するだけで、関数の文字列を.に送信します。

  2. Node.jsで記述されたSwank-jsサーバー(はい、ローカルマシンからリモートプロセスに直接評価できます)-評価した関数の文字列を受け取り、実際に評価します

  3. ブラウザを使用してそのサーバーの別のポートに接続し、そのブラウザで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のような)として持つのは悪い習慣ですか?これを行う別の方法があると思いますか?

4

3 に答える 3

2

実際、swank.jsは大幅に改善されており、NPMを使用してプロジェクトでswankjsをセットアップするのがはるかに簡単になりました。現在、ドキュメントを作成中ですが、機能はあります。

于 2012-03-05T19:57:12.500 に答える
2

これをチェックしてくださいhttp://nodejs.org/api/vm.html

var util = require('util'),
vm = require('vm'),
sandbox = {
  animal: 'cat',
  count: 2
};

vm.runInNewContext('count += 1; name = "kitty"', sandbox, 'myfile.vm');
console.log(util.inspect(sandbox));

// { animal: 'cat', count: 3, name: 'kitty' }

あなたに大いに役立つはずです、ノードのためのすべてのサンドボックスのものはそれを使用します:)しかし、あなたはそれを直接使用することができます:)

于 2012-05-30T11:35:09.230 に答える
0

サンドボックスでJSを実行するjsapp.usを見て、それを簡単な小さなテストサーバーとして世界に公開することができます。これがjsapp.usgithubリポジトリです。

また、#node.jsに立ち寄って、より迅速な応答のために質問をしてください:)

于 2011-03-30T04:03:39.120 に答える