我从Error对象挂钩堆栈跟踪并返回callSite
个对象的数组,我想过滤掉Node核心和本机站点。大多数情况下这不是问题,我可以在path.relative(process.cwd(), t.getFileName())
上运行正则表达式匹配,因为大多数文件都有其完整路径名。但是,某些模块具有不合格的名称,例如events.js
这是一个核心模块,因此,此方法将失败。
我有一些想法......
events.js
不在缓存中(require.cache
)所以也许所有核心模块的情况都是如此,所以如果我找不到它们,我可以将它们标记为核心在缓存中。这看起来有点沉重。有更好的方法吗?
答案 0 :(得分:0)
您说除了核心节点之外,所有路径都是绝对路径?假设核心模块都在同一目录中(我没有检查过),您可以将t.getFileName()
替换为path.resolve(coreModulesDir, t.getFileName())
,其中coreModulesDir
是核心模块的绝对路径。
答案 1 :(得分:0)
答案是使用process.binding
或更安全的require('builtin-modules')
,因为process.binding
不公开。
答案 2 :(得分:0)
您可以使用path.isAbsolute,因为核心模块将具有相对路径,而文件将具有绝对路径。