Подтвердить что ты не робот

Node.js - eval'ing к живому процессу

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

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

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

  • Дополнение SLIME-js к emacs, которое в сочетании с js2-режимом позволяет вы просто выпускаете C-M-x где-то в теле функции def - и off выводит строку функций на.

  • Сервер Swank-js (да, вы могли бы оценить свою локальную машину непосредственно на удаленный процесс), записанный в Node.js - он получает строка функции вы eval'ed и на самом деле evals его

  • Целая часть, которая позволяет вам подключаться к другому порту на этом сервере с вашим BROWSER, а затем позволяет вам манипулировать 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 не изменяет исходную функцию определения - SOOO.. Я просто использую простые "eval" и IT WORKS.

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

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

4b9b3361

Ответ 1

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

Ответ 2

Отметьте 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' }

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

Ответ 3

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

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