【发布时间】:2017-04-21 19:35:58
【问题描述】:
一般:在 node.js 中,如何访问正在执行的文件的范围?
示例:我有一个模块 (mod.js) 和一个需要它的文件 (main.js)。在 mod.js 中,我需要执行一个 eval() 来访问 main.js 的范围,如下所示:
mod.js:
exports.runCode = function(code) {
var x = 1;
// do some stuff to x and code
return eval(code) + x;
}
main.js:
var amod = require('./mod');
var func = function(a,b) {
return a + b;
}
console.log(amod.runCode('2+2')); // works fine
console.log(amod.runCode('func()')); // ReferenceError: func is not defined
重击:
$ node main
到目前为止,我已经尝试过使用节点的全局、虚拟机和进程对象,以及各种闭包
还要注意,我只能控制 mod.js,而不是 main.js(是的,我知道安全隐患)
【问题讨论】:
-
把mod.js改成
exports.runCode = eval -
这是一个最小的例子。 -- runCode() 函数还有其他部分(我现在更新了上面的代码以显示这一点)
-
那么是的,从 mod.js 访问 main.js 的范围是不可能的,你能做的最好的事情是
amod.runCode('func = ' + func + '; func(1, 2)')或者只是global.func = func在 main.js 中。 -
如果您的代码不比您的示例复杂,那么您可以简单地对函数进行字符串化,它就会起作用。
console.log(amod.runCode(`(${func.toString()})(2, 2)`));否则无法访问。我也错过了你的笔记I only have control over mod.js:) -
任意复杂
标签: javascript node.js scope eval