node.js - eval'ing для живого процесса

Кто-нибудь настраивал что-то подобное для себя, используя существующий node.js REPL? Я не придумал, как это сделать быстро.

Я делаю это сегодня с помощью emacs и вот такого: https://github.com/ivan4th/swank-js

Этот модуль состоит из:

  1. Надстройки SLIME-js для emacs, которая в сочетании с js2-режимом позволяет вы просто выдаете CMx где-нибудь в теле функции def - и off отправляет строку функции на сервер ..

  2. Swank-js (да, вы можете выполнить eval со своей локальной машины непосредственно удаленному процессу), написанное на Node.js - он получает строка функции, которую вы оценили, и фактически вычисляет ее

  3. Целая часть, которая позволяет вам подключаться к другому порту на этом сервере с вашим БРАУЗЕРОМ, а затем позволяет вам управлять DOM в этом браузере (что довольно удивительно, но не актуально)

Мое решение использует SLIME-js на стороне emacs, И мне требуется ('swank- js ') в моем файле app.js

Теперь ... У меня есть несколько проблем и вопросов относительно моего решения или другие возможные:

Q1: Это переборщить? Есть ли у кого-нибудь секретный способ оценки материала из nano в его живой процесс?

Q2: Мне пришлось изменить способ оценки swank-js ... он использовал некоторые разновидность черной магии вроде этого:


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

которая, насколько я понимаю, просто копирует глобальные переменные в новый контекст и после eval не изменяет исходную функцию определения - ТАК .. Я просто использую "eval" и ИТ РАБОТАЕТ.

Есть ли у вас какие-либо комментарии по этому поводу?

Q3: Чтобы повторно вычислить функцию, она должна быть ГЛОБАЛЬНОЙ функцией - Является ли плохой практикой иметь все определения функций как глобальные (похожие на clojure)? Как вы думаете, есть другой способ сделать это?

16
задан ayal gelles 31 January 2011 в 02:20
поделиться