javascript - node.js:从另一个模块访问局部变量

标签 javascript node.js serverside-javascript node-modules

我的问题

我正在编写一个名为 anode 模块,其中 require() 是一个模块 b(写陌生人)。不幸的是,a 不仅需要访问公共(public)成员——它还需要访问在模块范围内声明的局部变量。

// 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 作为模块运行,因此 require() 等无法从虚拟机。所以有 ReferenceError 之类的:

    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)

我的问题

获取在另一个模块中声明的局部变量的值最简洁的方法是什么?想法?

感谢您的帮助。

最佳答案

您可能永远不必这样做,但可能是有原因的。

您可以 Hook 加载程序并注入(inject) javascript 代码以导出您想要的内容。

// let's say you have node_modules/foreignmodule/index.js
// and in that script there is a local (not-exported) function foreignfunction().

var path = require('path');
_oldLoader = require.extensions['.js'];
require.extensions['.js'] = function(mod, filename) {
    if (filename == path.resolve(path.dirname(module.filename), 'node_modules/foreignmodule/index.js')) {
        var content = require('fs').readFileSync(filename, 'utf8');
        content += "module.exports.foreignfunction=foreignfunction;\n";
        mod._compile(content, filename);
    } else {
        _oldLoader(mod, filename);
    }
};

require('foreignmodule').foreignfunction();

关于javascript - node.js:从另一个模块访问局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14020189/

相关文章:

javascript - 遍历 jQuery 对象数组

javascript - 为什么在 if 语句中使用双感叹号?

javascript - 循环中嵌套回调

Javascript 对象偏执狂(我可以依赖元素的顺序吗)

asp.net - 从 javascript 调用 ASP.Net 函数

asp.net - IIS 有服务器端 Javascript 引擎吗?

javascript - Angularjs 文本区域验证需要并显示错误消息

javascript - 如何读取 Node 中发出的简单http请求的响应

javascript - 除了可扩展性之外,还有哪些使用 node.js 的架构原因?

javascript - 如何将数据传递到 Ant Design Modal