threads nodejs node library handling example error node.js eval read-eval-print-loop swank commonjs

nodejs - node.js-evaluando un proceso en vivo



nodejs http server (3)

Echa un vistazo a 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'' }

Debería ayudarte mucho, todas las cosas de la zona de pruebas para el nodo lo usan :) pero puedes usarlo directamente :)

¿Alguien configuró algo como esto para sí mismo utilizando el node.js REPL existente? No se me ocurrió una forma rápida de hacerlo.

La forma en que lo hago hoy es usando emacs y esto: https://github.com/ivan4th/swank-js

Este módulo está compuesto por:

  1. Un complemento SLIME-js para emacs que, en combinación con el modo js2, le permite simplemente emitir un CMx en algún lugar del cuerpo de una función def - y desactivar la cadena de la función al ..

  2. Swank-js server (sí, podría evaluar desde su máquina local directamente a un proceso remoto) escrito en Node.js: recibe la cadena de la función que evaluó y en realidad la califica

  3. Una parte completa que le permite conectarse a otro puerto en ese servidor con su BROWSER y luego le permite manipular el DOM en ese navegador (lo cual es bastante sorprendente pero no relevante)

Mi solución utiliza SLIME-js en el lado de emacs Y necesito (''swank-js'') en mi archivo app.js

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

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

P2: Tuve que cambiar la forma en que swank-js es EVALing ... usó algún tipo de magia negra como esta:

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

lo que, según tengo entendido, simplemente copia las variables globales al nuevo contexto, y luego de evaluar, no cambia las definiciones de las funciones originales - SOOO. Solo estoy usando "eval" y "IT WORKS".

¿Tiene algún comentario al respecto?

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


En realidad, swank.js está mejorando mucho y ahora es mucho más fácil configurar swank js con su proyecto usando NPM. Estoy en el proceso de escribir la documentación ahora mismo, ¡pero la funcionalidad está ahí!


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ápida. Aquí está el repositorio de jsapp.us github .

Además, deténgase en #node.js y haga preguntas para una respuesta más rápida :)