阅读文件,fs.readFileSync和eval内容......这范围内具备的功能? 如何访问

2019-09-24 04:51发布

我最近想将文件导入到我现有的node.js项目。 我知道这应该与模块被写入,但我有我的外部JavaScript文件是这样的:

 eval(fs.readFileSync('public/templates/simple.js')+'')

simple.js的内容是这样的:

if (typeof examples == 'undefined') { var examples = {}; }
if (typeof examples.simple == 'undefined') { examples.simple = {}; }


examples.simple.helloWorld = function(opt_data, opt_sb) {
 var output = opt_sb || new soy.StringBuilder();
 output.append('Hello world!');
 return opt_sb ? '' : output.toString();
};

(是的,谷歌关闭模板)。

我现在可以使用调用模板文件:

examples.simple.helloWorld();

一切工作像预期。 但是我无法弄清楚这些功能的范围,并在那里我可能访问示例对象。

一切都在0.8的Node.js服务器运行,就像我说的它的工作......我只是不很知道为什么吗?

感谢您的澄清。

Answer 1:

eval()把变量到您把它称为地方的局部范围。

这是因为如果在eval()是在字符串参数的代码替换。

我建议改变文件的内容:

(function() {
    ...
    return examples;
})();

这样一来,你可以说:

var result = eval(file);

这将是明显的一切是/结束。

注: eval()是一个巨大的安全隐患; 确保从受信任来源只读。



文章来源: Read file with fs.readFileSync and eval contents…which scope have the functions? How to access?