【发布时间】:2012-12-10 19:22:52
【问题描述】:
我的问题
我正在编写一个名为a 的node 模块,其中require()s 是一个模块b(由陌生人编写)。不幸的是,a 不仅需要访问公共成员 - 它还需要访问在模块范围内声明的局部变量。
// a
var b = require('b');
console.log(b.public);
console.log(b.private); // undefined
// b
var c = require('c');
var stdin = process.stdin;
exports.public = true;
var private = true;
我的解决方案
// a
var b = require('b');
var srcPath = require.resolve('b');
console.log(b.public);
fs.readFile(srcPath, 'utf-8', function (err, src) {
var box = {};
var res = vm.runInNewContext(src, box, srcPath);
console.log(box.private);
});
但vm 不会将b 作为模块运行,因此无法从vm 的上下文中访问require() 等。所以有ReferenceErrors之类的:
var res = vm.runInNewContext(src, box, scPath);
^
ReferenceError: require is not defined
at <module b>
at <module a>
at fs.readFile (fs.js:176:14)
at Object.oncomplete (fs.js:297:15)
我的问题
获取在另一个模块中声明的局部变量的值最简洁的方法是什么?想法?
感谢您的帮助。
【问题讨论】:
-
导出getter/setter?您肯定不希望其他人随意弄乱您所有的局部变量,对吗?
-
编辑 b 以导出您要访问的数据。不要试图从外部侵入它。
-
感谢您的想法。但是模块
b是由一个陌生人而不是我写的(我不想弄脏我的手)。 - 还有其他想法吗? -
@fridojet,您找到解决方案了吗?
-
我在 stackoverflow 上看到的最好的问题之一。这应该是一个节点模块。 +1
标签: javascript node.js serverside-javascript node-modules