2011-01-31 45 views
16

有没有人为自己使用现有的 node.js REPL设置类似的东西?我没有想到一个快速的方法来做到这一点。node.js - 评估现场流程

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

此模块组成:

  1. 粘液-JS插件emacs的,它与JS2型组合,让 只需在一个函数体发出CMx的地方定义 - 和 关进函数的字符串到..

  2. 斯旺克-JS服务器(是的,你ç写在Node.js的乌尔德EVAL从本地机器 直接向远程进程) - 它接收 字符串你eval'ed的功能,实际上它evals

  3. 一个整体的一部分,可以让你连接到另一该服务器 与您的浏览器上的端口,然后让你操纵上的浏览器 的DOM(这是相当惊人的,但不相关)

我的解决方案使用的emacs的侧煤泥JS和我需要(” swank- js')on my app.js文件

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

问题1:这是否过分吗?有人有一个秘密的方式来评估从纳米到他的现场流程的东西 ?

Q2:我不得不改变方式斯旺克-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)是否是不好的做法?你认为有另一种方法可以做到这一点吗?

+0

,我很感兴趣这个问题也是如此..我怀疑玩弄那里的黑魔法可能会提供一些答案。我知道我今天要做什么! –

回答

2

其实,swank.js越来越好很多,现在是很容易建立斯旺克使用NPM项目的js。我现在正在编写文档,但功能在那里!

0

你可以看看jsapp.us,它在沙箱中运行JS,然后将它作为一个快速的小测试服务器公开给世界。这是jsapp.us github repo

此外,停止进#node.js和问问题,更快速的响应:)

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' } 

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