繁体   English   中英

要求内部新功能

[英]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__filenamerequire 结果是使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM