node.js - avaliando um processo ativo
-
27-10-2019 - |
Pergunta
Alguém criou algo assim para si mesmo usando o nó.js REPL?Não pensei em uma maneira rápida de fazer isso.
A maneira como faço isso hoje é usando o emacs e isto:https://github.com/ivan4th/swank-js
Este módulo é composto por:
Um addon slime-js para os emacs que, em combinação com o modo JS2, permite que você simplesmente emita um CMX em algum lugar do corpo de uma função definitivamente-e desligam a sequência da função para o ..
Servidor Swank-js (sim, você pode eval de sua máquina local diretamente para um processo remoto) escrito em Node.js - Recebe o string da função que você eval'ed e realmente evals it
Uma parte inteira que permite se conectar a outra porta nesse servidor com seu navegador e depois permite que você manipule o DOM naquele navegador (que é incrível, mas não relevante)
Minha solução usa SLIME-js no lado do emacs E eu exijo('swank- js') no arquivo .js meu aplicativo
Agora..Tenho vários problemas e dúvidas em relação à minha solução ou outras possíveis:
P1:Isso é exagero?Alguém tem uma maneira secreta de evitar as coisas? De Nano para o seu processo ao vivo?
Q2:Eu tive que mudar a forma como o Swank-js está avaliando.ele usou alguns tipo de magia negra assim:
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, pelo que entendi, apenas copia as variáveis globais para o Novo contexto, e sobre Eval, não altera a função original definições - SOOO..Estou apenas usando simples "eval" e TI OBRAS.
Você tem algum comentário sobre isso?
P3:A fim de re-eval uma função, ela precisa ser uma função GLOBAL - É má prática ter todas as definições de função como globais (clojure-like)?Você acha que existe outra maneira de fazer isso?
Solução
Na verdade, o swank.js está ficando muito melhor e agora é muito mais fácil configurar o swank js com seu projeto usando NPM.Estou escrevendo a documentação agora, mas a funcionalidade está lá!
Outras dicas
Veja isso 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' }
Deve ajudá-lo muito, todas as coisas do sandbox para o node o utilizam :) mas você pode usá-lo diretamente :)
Você pode dar uma olhada em jsapp.us, que executa JS em uma sandbox, e depois expõe isso ao mundo como um pequeno servidor de teste rápido.Aqui está o repositório github jsapp.us.
Além disso, pare em #node.js e faça perguntas para uma resposta mais rápida :)