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:

  1. 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 ..

  2. 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

  3. 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?

È stato utile?

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 :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top