簡體   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