2011-01-31 17 views
16

Czy ktoś skonfigurował coś takiego dla siebie używając istniejącego node.js REPL? Nie myślałem o szybkiej drodze, żeby to zrobić.node.js - eval'ing do procesu na żywo

Sposób, w jaki to zrobić dzisiaj jest za pomocą Emacsa i to: https://github.com/ivan4th/swank-js

Moduł ten składa się z:

  1. a slime-js dodatek do emacs, które w połączeniu z JS2 trybie , pozwala wystarczy wydać CMX gdzieś w ciele funkcji def - i off idzie string funkcja jest do ..

    serwer
  2. Swank-js (tak, ty c Ould eval z lokalnego automatyczna bezpośrednio do zdalnego procesu) napisany w node.js - Odbiera ciąg funkcji, którą eval'ed i faktycznie evals go

  3. Cała część, która pozwala połączyć się z innym port na tym serwerze za pomocą przeglądarki, a następnie pozwala manipulować DOM na tej przeglądarce (co jest dość niesamowite, ale nie ma znaczenia)

Moje rozwiązanie wykorzystuje mułu js po stronie emacs i ja require (” swank- js) na moim pliku app.js

Teraz .. Mam kilka problemów i pytań dotyczących mojego rozwiązania lub innych możliwych:

Pytanie 1: Czy to przesada? Czy ktoś ma tajny sposób na zarabianie na rzeczy z nano na jego żywo?

Q2: Musiałem zmienić sposób Swank-js jest EVALing .. kiedyś jakiś rodzaj czarnej magii tak:


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"); 

które, o ile rozumiem, tylko kopie do zmiennych globalnych nowy kontekst, a po eval, nie zmienia oryginalnej funkcji - SOOO .. Używam tylko prostych "eval" i IT WORKS.

Czy masz jakieś uwagi dotyczące tego?

Q3: Aby ponownie sprawdzić funkcję, musi ona być funkcją GLOBALNĄ - Czy źle jest mieć wszystkie definicje funkcji jako globalne (podobne do clojure)? Czy myślisz, że jest inny sposób na zrobienie tego?

+0

Właściwie jestem bardzo zainteresowany to też pytanie. Podejrzewam, że bawienie się czarną magią może dawać pewne odpowiedzi. Wiem, co zrobię dzisiaj! –

Odpowiedz

2

Właściwie swank.js jest coraz dużo lepiej, i to jest teraz znacznie łatwiej ustawić Swank js z projektem przy użyciu KMP. Jestem w trakcie pisania dokumentacji już teraz, ale funkcjonalność tam jest!

0

Możesz rzucić okiem na jsapp.us, który uruchamia JS w piaskownicy, a następnie udostępnia go światu jako szybki mały serwer testowy. Oto jsapp.us github repo.

także zatrzymać się #node.js i zadawania pytań na szybsze odpowiedzi :)

2

to sprawdzić 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' } 

należy pomóc dużo, wszystkie rzeczy, piaskownica dla węzła używa go :) ale można go używać bezpośrednio :)

Powiązane problemy