gpt4 book ai didi

javascript - 要求内部新功能

转载 作者:搜寻专家 更新时间:2023-10-31 23:57:22 25 4
gpt4 key购买 nike

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

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

如何在 new Function 中访问 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() 创建的函数无法直接访问它们。

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

console.log(__dirname)
let someF = new Function("console.log(__dirname)")
someF()

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

关于javascript - 要求内部新功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51164425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com