如何从代码文本加载模块

How to load module from code text?

本文关键字:加载 模块 文本 代码      更新时间:2023-09-26

我想从原始文本中加载模块,例如

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之前没有其他安全的方法来检查它,除非您自己遍历字符串并禁止某些可能的攻击....

但是记住,任何可能出错的事情都会出错。有了用户输入,就有了无限的可能性。