node.js – 评估一个现场stream程

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

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

该模块由以下部分组成:

  1. 一个SLIME-js插件到emacs,与js2-mode结合使用,你可以简单地在一个函数def的主体中的某个地方发出一个CMx,然后closures该函数的string到..

  2. Swank-js服务器(是的,你可以从本地机器上直接调用远程进程)写在Node.js中 – 它接收你所评估函数的string,

  3. 整个部分可以让你使用BROWSER连接到该服务器上的另一个端口,然后让你在该浏览器上操作DOM(这是相当了不起但不相关)

我的解决scheme在emacs一侧使用SLIME-js,我需要('swank-js')在我的app.js文件

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

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

据我所知,它只是将全局variables复制到新的上下文中,并且在eval时不会更改原始函数定义 – SOOO ..我只是使用简单的“eval”和IT WORKS。

你对此有何评论?

Q3:为了重新评估一个函数,它需要是一个GLOBAL函数 – 将所有的函数定义为全局函数(clojure-like)是不好的做法吗? 你认为还有另外一种方法可以做到吗?

实际上,swank.js正在变得更好,现在使用NPM来设置swank js更容易。 我现在正在编写文档,但function在那里!

看看这个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' } 

应该帮助你很多,节点的所有沙箱的东西使用它:)但你可以直接使用它:)

你可以看看jsapp.us,它在沙盒中运行JS,然后把它作为一个快速的小testing服务器公开给世界。 这是jsapp.us github回购 。

此外,停下来#node.js并提出问题,以更快的回应:)