2014-03-30 41 views
1

背景:我爲node.js開發了一個小型模塊系統,該系統從一個單獨的源服務器異步加載所有必需的代碼,並使用eval(code)進行編譯。我的問題是,對於這種「評估」代碼中的所有運行時錯誤,堆棧跟蹤顯示<anonymous>作爲文件名 - 我無法區分哪個代碼段被引用。Nodejs:如何設置eval的文件名?

我的問題:有沒有辦法設置eval的文件名,以便堆棧跟蹤顯示一些程序定義的字符串而不是<anonymous>

我目前的(不完美的)解決方案:截至目前,我將代碼寫入文件並加載到require(file)。這將播種文件名---但這是一個複雜的解決方法。

注意:正常情況下,運行時錯誤不會在編譯eval調用時顯示,但稍後會在使用編譯代碼時顯示。因此,圍繞eval進行嘗試/捕捉並不能幫助識別哪個代碼塊失敗。

回答

1

不要使用eval(永遠)。爲了您的目的,您可以使用vm modulevm.runInThisContext或其他)。您可以將文件名稱作爲參數傳遞。 require內部也一樣。

+0

非常感謝您的快速回答! –

+0

「不要使用eval(永遠)。」不要分發這個想法。 Eval可以用於不同的情況,但它可以讓開發人員考慮安全性等。 –

+0

這是我的意見,但我的意思是。如果你需要eval-ish的話,可以使用'new Function' – vkurchatkin