Node.JS vm.runInNewContext()vs require()和eval()

  • vm.runInNewContext是否像eval一样被认为是黑魔法?
  • require和读取文件之间是否存在显着的性能差异,并使用vm来运行它,或者是相同的(如果你实现caching等,只是想添加一些variables的上下文)

runInNewContext并不意味着被用来代替requireeval ,而是作为创build沙箱环境的一种方式,在沙箱环境中可以安全地运行其他脚本。

缺点是速度慢(创build需要10毫秒左右),占用几兆字节。 所以不,不要用它作为requirereplace。

如果你签出在node.js中实现加载模块的代码,你会发现require需要使用vm.runInNewContext或者vm.runInThisContext 。 然而,这个require做一些其他的事情,比如caching模块。

节点文档显示vm命令和eval之间的行为是如何相似和不同的。

所以,require,eval和vm都有一点不同,但都可以用来加载代码。 如果您正在加载来自客户端的任意代码,它们都有类似的安全问题。