node.js - valutazione di un processo live
-
27-10-2019 - |
Domanda
Qualcuno ha creato qualcosa di simile per se stesso usando l'esistente node.js REPL? Non ho pensato a un modo rapido per farlo.
Il modo in cui lo faccio oggi è usare emacs e questo: https://github.com/ivan4th/swank-js
Questo modulo è composto da:
-
Un addon SLIME-js per emacs che, in combinazione con js2-mode, consente si emette semplicemente un C-M-x da qualche parte nel corpo di una funzione def - e off trasferisce la stringa della funzione a ..
-
Server Swank-js (sì, puoi valutare dalla tua macchina locale direttamente a un processo remoto) scritto in Node.js - Riceve il file stringa della funzione che hai valutato e in realtà lo valuta
-
Un'intera parte che ti consente di connetterti a un'altra porta su quel server con il tuo BROWSER e poi ti permette di manipolare il DOM su quel browser (che è abbastanza sorprendente ma non pertinente)
La mia soluzione usa SLIME-js sul lato emacs E richiedo ('swank- js ') sul mio file app.js
Ora ... ho diversi problemi e domande riguardanti la mia soluzione o altri possibili:
D1: È esagerato? Qualcuno ha un modo segreto per valutare le cose da nano al suo processo live?
D2: Ho dovuto cambiare il modo in cui swank-js sta valutando .. ne ha usati alcuni tipo di magia nera come questo:
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");
che, per quanto ho capito, copia semplicemente le variabili globali nel file nuovo contesto, e su eval, non cambia la funzione originale definizioni - SOOO .. Sto solo usando semplice "eval" e IT OPERE.
Hai commenti in merito?
D3: Per riesaminare una funzione, deve essere una funzione GLOBALE - È una cattiva pratica avere tutte le definizioni di funzione come globali (tipo clojure)? Pensi che ci sia un altro modo per farlo?
Soluzione
In realtà, swank.js sta migliorando molto ed ora è molto più facile impostare swank js con il tuo progetto utilizzando NPM.In questo momento sto scrivendo la documentazione, ma la funzionalità c'è!
Altri suggerimenti
Dai un'occhiata 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' }
Dovrebbe aiutarti molto, tutte le cose sandbox per node lo usano :) ma puoi usarlo direttamente :)
Potresti dare un'occhiata a jsapp.us, che esegue JS in una sandbox, e poi lo espone al mondo come un piccolo server di prova veloce.Ecco il jsapp.us github repo .
Inoltre, fermati a # node.js e fai domande per unrisposta più rapida :)