我尝试使用StackTrace和StackTraceGPS来提取代码错误位置,但是,当捆绑文件中发生错误时,它会尝试检索不存在的文件。
例如我的vendors.min.js只是jQuery,jQueryUi的组合和迷你文件。
在我的应用中加载
vendors.min.js
app.min.js
然后我在app.min.js中触发错误并获取此错误对象:
Uncaught TypeError: (intermediate value).run is not a function
at HTMLDocument.<anonymous> (app.js:95)
at HTMLDocument.dispatch (vendors.min.js?v=6.0.83-11025:formatted:2393)
at HTMLDocument.m.handle (vendors.min.js?v=6.0.83-11025:formatted:2325)
现在我将此堆栈发送到
StackTrace.fromError(error).then(stackTraceCallback);
function stackTraceCallback(stackFrames) {
const gps = new StackTraceGPS();
const newFrames = new Array(stackFrames.length)
let frameResolved = 0;
function allFramesResolved(){
const newFrameStrings = newFrames.map(function(frame) {
return frame.toString();
})
console.log('allFramesResolved has completed');
console.log(newFrameStrings.join("\n"))
}
stackFrames.forEach((stackFrame, i) => {
gps.pinpoint(stackFrame)
.then(function(newFrame: any) {
newFrames[i] = newFrame
frameResolved++;
if (frameResolved === stackFrames.length) {
allFramesResolved()
}
}, function(){
console.error(arguments);
});
});
}
打印stackFrame我会得到这个:
{columnNumber:0,
fileName:"http://example.com/dist/jquery-3.1.0.js",
functionName:"handle",
lineNumber:4918}
它正在尝试加载不存在且永远不会加载的jquery-3.1.0.js。所有jQuery都驻留在vendor.min.js中。我使用的所有文件都有源映射,而我的缩小的app.js文件显示错误的位置就好了,这样就行了。