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

Chr*_*ini 7 v8 eval node.js

  • vm.runInNewContext被认为是黑魔法eval吗?
  • require读取文件和使用vm它之间是否存在显着的性能差异,或者在引擎盖下是否相同(如果您实现了缓存等,并且只是想在上下文中添加一些变量)

Jam*_*ery 9

如果你查看在node.js实现加载模块的代码,你会发现require需要使用vm.runInNewContextvm.runInThisContext.该require然而,做其他一些额外的东西,比如缓存模块.

节点文档示出了行为是如何VM命令和eval之间相似和不同.

因此,require,eval和vm都有点不同,但所有都可用于加载代码.如果您加载来自客户端的任意代码,它们都会有类似的安全问题.


Jan*_*oom 6

runInNewContext并不打算用作require或的替代品eval,而是作为一种创建沙箱环境的方式,您可以在其中安全地运行其他脚本。

缺点是它很慢(创建需要大约 10 毫秒)并且占用几兆字节。所以不,不要用它作为require替代品。

  • 嘿克里斯,你更好的解决方案是什么? (11认同)