我想从原始文本加载模块,例如
var code = "exports.name = 'hello'";
// Is there such a function?
var name = requrie_from_code(code).name;
console.log(name); // should be 'hello'
我认为可以通过首先将代码保存到临时文件中来完成,例如 tmpcode.js
然后require('./tmpcode.js')
。但有没有办法直接做到呢?
最佳答案
要将 JavaScript 字符串解释为 JavaScript 本身,您可能应该使用 eval
函数...但是请注意我的警告,如果存在任何形式的用户输入,或者如果您需要复杂的调试,您将会遇到一些困难,并且会受到伤害。
JavaScript 的 eval
接受字符串输入并解释它,就这么简单......下面是一个示例:
var test = "var example = 5;";
eval(test);
console.log(example);
就这么简单...
<小时/>以下是 eval 可能很危险的一些情况!
假设您由于某种原因有以下代码:
dbModule.syncConnection(function(database){
eval("var test = '" + someUserInput + "'");
});
这样,用户可以通过输入如下内容轻松绕过您设置的内容:
"'; database.query('DELETE EVERYTHING MWAHAHA'); '"
eval
函数将变成:
var test = ''; database.query('DELETE EVERYTHING MWAHAHA'); ''
...这只是一个简单的例子,说明了 eval
是如何危险的。
否则,在解释 JavaScript 之前确实没有任何其他安全的方法来检查它,除非您自己运行字符串并禁止某些可能的攻击......
但请记住,任何可能出错的事情都会出错。通过用户输入,就有无限的可能性。
关于javascript - 如何从代码文本加载模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31511480/