Javascript 需要内部新功能

Javascript 需要内部新功能,javascript,node.js,Javascript,Node.js,我正在调试一段代码,这段代码是我公司的一位老员工为了进行外观更新而编写的,他不懂一些东西 当对象是我的输入时,代码使用新函数(对象)将字符串编译为函数。 我试图读取输入中的一个文件,如下-require(“fs”).readFileSync(“myfile.txt”)但是函数抛出一个异常,该异常未定义require 如何在新功能中访问require,或者其他-如何在新功能中以不同的方式读取文件内容 感谢如果出于任何原因需要使用新函数()您可以通过以下内容传入对fs的引用或任何其他内容: cons

我正在调试一段代码,这段代码是我公司的一位老员工为了进行外观更新而编写的,他不懂一些东西

当对象是我的输入时,代码使用
新函数(对象)
将字符串编译为函数。 我试图读取输入中的一个文件,如下-
require(“fs”).readFileSync(“myfile.txt”)
但是函数抛出一个异常,该异常未定义
require

如何在新功能中访问
require
,或者其他-如何在
新功能中以不同的方式读取文件内容


感谢如果出于任何原因需要使用
新函数()
您可以通过以下内容传入对
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()
创建函数时,您的函数在节点的全局范围内运行。但在节点中,有一些名称添加到所有模块中,这些模块可能看起来是全局的,但实际上不在全局对象上。其中包括
\uuuu目录名
\uuuu文件名
,以及
要求
。结果是,使用
new Function()
创建的函数无法直接访问它们

这里有一个简单的例子。第一个
console.log
可以工作,但第二个会抛出引用错误:

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

有关详细信息,请参阅:

不要这样做。此代码在哪里运行
require()
将在node.js中定义,但不会在浏览器中运行的Javascript中定义。使用
newfunction()
动态编写新代码通常也是一种不好的做法。有一些奇怪的例外情况,人们可能会这样做,但大多数情况下,传递参数的预编译函数是理想的编码方式。您能否详细说明为什么需要使用
new function()
<出于安全性和性能考虑,不鼓励使用代码>求值(
新函数()
),我不希望您使用
新函数()
,除非您必须这样做。@jfriend00同意第一点。在第二种情况下,您应该在节点中尝试:let
let someFn=new函数(“let fs=require('fs')”);someFn()
@jfriend00:“为什么不定义require()?
新函数在全局范围内创建,我假设
require
以某种方式神奇地传递到模块范围?但我可能错了。是的,费利克斯克林。这里有文档记录:--我将添加一个编辑。“此变量可能看起来是全局变量,但不是。请参阅require()lol@FelixKling-啊,我明白了。