9

我最近尝试将一个文件导入到我现有的 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();

一切都按预期工作。但是,我无法弄清楚这些函数的范围是什么,以及我可以在哪里访问示例对象。

一切都在 node.js 0.8 服务器中运行,就像我说的那样工作......我只是不知道为什么?

感谢您的澄清。

4

1 回答 1

13

eval()将变量放入您调用它的地方的本地范围内。

就好像eval()被字符串参数中的代码替换了一样。

我建议将文件的内容更改为:

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

这样,你可以说:

var result = eval(file);

一切都在哪里/结束在哪里,这将是显而易见的。

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

于 2012-10-16T14:59:24.150 回答