[英]require inside new Function
我正在调试一个代码,我公司过去的一个工作人员为了进行化妆品更新而无法理解。
当对象是我的输入时,代码使用new Function(object)
将字符串编译为函数。 我正在尝试读取输入中的文件,如下所示 - require("fs").readFileSync("myfile.txt")
但该函数抛出了一个require is not defined
的异常。
如何在新函数内部访问require
,或者如何在new Function
内以不同方式读取文件内容?
谢谢
如果由于某种原因你需要使用new Function()
你可以通过以下方式传递对fs
或其他任何内容的引用:
const fs = require('fs')
let someFn = new Function('fs', "let text = fs.readFileSync('test.txt', {encoding: 'utf8'}); console.log(text)")
someFn(fs)
您也可以通过在require
以同样的方式,但似乎甚至丑陋。
问题是当您使用new Function()
创建函数时,您的函数在Node的全局范围内运行。 但是在Node中,有一些名称被添加到可能看起来是全局的所有模块中,但实际上并不在全局对象上。 这些包括__dirname
, __filename
和require
。 结果是使用new Function()
创建的new Function()
无法直接访问它们。
这是一个更简单的例子。 第一个console.log
工作,但是一秒抛出一个ReferenceError:
console.log(__dirname)
let someF = new Function("console.log(__dirname)")
someF()
有关更多信息,请参阅: https : //nodejs.org/api/globals.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.