Кто-нибудь настраивал что-то подобное для себя, используя существующие 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)? Как вы думаете, есть ли другой способ сделать это?