需要在新函数中

Dan*_*ero 5 javascript node.js

我正在调试我公司的一位前员工为了进行外观更新而编写的代码,但无法理解某些内容。

该代码使用当对象是我的输入时将字符串编译为函数new Function(object)。我正在尝试像这样读取输入中的文件 -require("fs").readFileSync("myfile.txt")但该函数抛出一个异常require is not defined

如何访问require新函数内部,或者如何在内部以不同方式读取文件内容new Function

谢谢

Mar*_*yer 3

如果出于某种原因您需要使用,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)
Run Code Online (Sandbox Code Playgroud)

你也可以用require同样的方式通过,但这看起来更难看。

问题是,当您使用 创建函数时new Function(),您的函数在 Node 的全局范围内运行。但是在 Node 中,有一些名称被添加到所有模块中,这些名称可能看起来是全局的,但实际上并不在全局对象上。这些包括__dirname__filename、 和require。结果是用创建的函数new Function()无法直接访问它们。

这是一个更简单的例子。第一个console.log有效,但第二个抛出一个 ReferenceError:

console.log(__dirname)
let someF = new Function("console.log(__dirname)")
someF()
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅:https ://nodejs.org/api/globals.html