2016-08-14 62 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不公开。