eval
一样被视为黑魔法?require
和阅读a之间的显着性能差异
文件并使用vm
来运行它或在引擎盖下是相同的(如果
你实现了缓存等,只是想添加一些变量
上下文)答案 0 :(得分:9)
如果您查看implements loading Modules in node.js代码,则会看到需要使用vm.runInNewContext或vm.runInThisContext。然而,require
会做一些其他额外的事情,比如缓存模块。
node documentation显示了vm命令和eval之间行为的相似和不同。
因此,require,eval和vm都有点不同,但都可以用来加载代码。如果您加载来自客户端的任意代码,它们都会有类似的安全问题。
答案 1 :(得分:4)
runInNewContext
并不是要用来代替require
或eval
,而是用来创建一个可以安全地运行其他脚本的沙箱环境。
缺点是它很慢(创建需要大约10毫秒)并占用几兆字节。所以不,不要将它用作require
替代品。