node.js - 评估实时进程

aya*_*les 16 eval swank commonjs node.js read-eval-print-loop

有没有人使用现有的node.js REPL为自己设置这样的东西?我没想到要快速做到这一点.

我今天这样做的方式是使用emacs和这个:https: //github.com/ivan4th/swank-js

该模块由以下部分组成:

  1. 一个SLIME-js插件到emacs,结合js2-mode,让你只需在函数def的主体中的某个地方发出一个CMx,然后关闭函数的字符串到...

  2. 用Node.js编写的Swank-js服务器(是的,您可以从本地计算机直接评估到远程进程) - 它接收您评估的函数的字符串并实际上将其删除

  3. 整个部分允许您使用浏览器连接到该服务器上的另一个端口,然后让您在该浏览器上操作DOM(这非常了不起但不相关)

我的解决方案在emacs端使用SLIME-js我需要('swank-js')在我的app.js文件上

现在..我有几个关于我的解决方案或其他可能的问题和问题:

Q1:这有点过头了吗?有人有秘密的方式来评估从纳米到他的实时过程的东西吗?

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");
Run Code Online (Sandbox Code Playgroud)

据我所知,只是将全局变量复制到新的上下文中,并且在eval上,不会更改原始函数定义 - SOOO ..我只是使用简单的"eval"和IT WORKS.

你对此有何评论?

问题3:为了重新评估函数,它需要是一个GLOBAL函数 - 将所有函数定义都设置为全局(类似clojure)是不好的做法?你认为还有另一种方法吗?

Jon*_*ell 2

实际上,swank.js 正在变得越来越好,现在使用 NPM 在您的项目中设置 swank js 变得更加容易。我现在正在编写文档,但功能已经存在了!