2011-01-31 10 views
16

¿Alguien configuró algo así para él usando el node.js REPL existente? No pensé en una forma rápida de hacerlo.node.js - evaluando a un proceso en vivo

La forma en que lo hago hoy en día es el uso de emacs y esto: https://github.com/ivan4th/swank-js

Este módulo se compone de:

  1. A BABA-js complemento a emacs que, en combinación con js2-mode , permite simplemente emite un CMx en alguna parte del cuerpo de una función DEF - y fuera va cadena de la función al servidor ..

  2. Swank-js (sí, que c Uld eval desde su local de la máquina- directamente a un proceso remoto) escrito en Node.js - Se recibe la cadena de la función que eval'ed y en realidad evals que

  3. toda una parte que le permite conectarse a otro el puerto de dicho servidor con su navegador y luego le permite manipular el DOM en ese navegador (que es bastante increíble, pero no es relevante)

Mi solución utiliza BABA-js en el lado Emacs y que require (' swank- js ') en mi archivo app.js

Ahora .. Tengo varios problemas y preguntas con respecto a mi solución o otros posibles:

Q1: ¿Esto es exagerar? ¿Alguien tiene una forma secreta de evaluar cosas de nano en su proceso en vivo?

P2: tuve que cambiar la forma Swank-js se EVALing .. es utilizado algún tipo de magia negro como esto:


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

que, por lo que entiendo, simplemente copia las variables globales para el nuevo contexto, y después de eval, no cambia las funciones originales definiciones - SOOO .. Estoy utilizando simplemente "eval" y IT OBRAS.

¿Tiene algún comentario al respecto?

Q3: Para volver a evaluar una función, tiene que ser una función GLOBAL - ¿Es una mala práctica tener todas las definiciones de funciones como globales (tipo clojure)? ¿Crees que hay otra manera de hacer esto?

+0

En realidad, estoy muy interesado en esta pregunta también. Sospecho que jugar con la magia negra podría ayudar a algunas respuestas. ¡Sé lo que voy a hacer hoy! –

Respuesta

2

En realidad, swank.js es cada vez mucho mejor, y ahora es mucho más fácil de configurar Swank js con un proyecto mediante la NGP. Estoy en el proceso de escribir la documentación en este momento, ¡pero la funcionalidad está ahí!

0

Puede echar un vistazo a jsapp.us, que ejecuta JS en una caja de arena, y luego lo expone al mundo como un pequeño servidor de prueba rápido. Aquí está el jsapp.us github repo.

Además, parada en #node.js y hacer preguntas para una respuesta más rápida :)

2

mira esto 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' } 

en caso de que ayudar mucho, todas las cosas de recinto de seguridad para el nodo utiliza :) pero se puede utilizar directamente :)

Cuestiones relacionadas