[英]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.