2016-08-14 56 views
0

我掛鉤了來自Error對象的堆棧跟蹤並返回了一個callSite對象的數組,我想過濾出Node核心和本地站點。大多數情況下,這不是問題,我可以在path.relative(process.cwd(), t.getFileName())上運行正則表達式匹配,因爲大多數文件都將具有完整路徑名。但是,某些模塊的名稱不合格,例如events.js這是一個核心模塊,因此此方法將失敗。從節點JS中的V8堆棧跟蹤中過濾核心模塊

我有幾個想法一樣......

  1. 註冊我要定位的模塊文件名,例如我可以收集所有的.js文件從項目目錄。
  2. 我注意到events.js不在高速緩存中(require.cache),所以也許這是所有核心模塊的情況,所以如果我在高速緩存中找不到它們,我可以將它們標記爲核心。這看起來有點沉重。

有沒有更好的方法來做到這一點?

回答

0

你是說所有的路徑是絕對的,除了核心nodejs的?假設核心模塊都在同一個目錄下(我沒有選中),你可以用path.resolve(coreModulesDir, t.getFileName())代替t.getFileName(),其中coreModulesDir是核心模塊的絕對路徑。

+0

問題是核心模塊與項目根目錄中的文件沒有區別。但是,你給了我一個想法:也許我可以使用'require.resolve'來獲取核心模塊的完整路徑。 –

0

答案是使用process.binding或更安全require('builtin-modules')因爲process.binding不公開。