node.js - перевод в живой процесс - PullRequest
16 голосов
/ 31 января 2011

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

То, как я делаю это сегодня, использует emacs, и это: https://github.com/ivan4th/swank-js

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

  1. Дополнение SLIME-js к emacs, которое в сочетании с js2-mode позволяет вы просто запускаете C-M-x где-нибудь в теле функции def - и off отключает строку функции до ..

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

  3. Целая часть, которая позволяет вам подключиться к другому порту на этом сервере с вашим браузером, а затем позволяет вам управлять DOM в этом браузере (что довольно удивительно, но не актуально)

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

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

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

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


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" и ИТ WORKS.

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

Q3: для того, чтобы повторно оценить функцию, она должна быть функцией GLOBAL - Это плохая практика, чтобы все определения функций были глобальными (подобными clojure)? Как вы думаете, есть другой способ сделать это?

Ответы [ 3 ]

2 голосов
/ 05 марта 2012

На самом деле, swank.js становится намного лучше, и теперь гораздо проще настроить swank js для вашего проекта с использованием NPM. Я сейчас нахожусь в процессе написания документации, но функциональность есть!

2 голосов
/ 30 мая 2012

Проверьте это 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' }

Должно помочь вам, все вещи из песочницы для узла используют его :), но вы можете использовать его напрямую:)

0 голосов
/ 30 марта 2011

Вы можете взглянуть на jsapp.us, который запускает JS в «песочнице», а затем представляет его всему миру в качестве небольшого тестового сервера.Вот репозиторий jsapp.us github .

Кроме того, зайдите в # node.js и задайте вопросы для быстрого ответа:)

...