gpt4 book ai didi

Angular 错误处理程序在 aot 包上包含组件

转载 作者:行者123 更新时间:2023-12-03 07:58:19 24 4
gpt4 key购买 nike

我有一个看起来像这样的错误处理程序:

@Injectable() export class GlobalErrorHandler implements ErrorHandler {
constructor(private injector: Injector) { }
handleError(error) {
const errorService = this.injector.get(ErrorService);
const location = this.injector.get(LocationStrategy);

const url = location instanceof PathLocationStrategy
? location.path() : '';

StackTrace.fromError(error).then(stackframes => {
const stackString = stackframes
.splice(0, 20)
.map((sf) => {
return sf.toString();
}).join('\n');

const errorObject: IError = {
errorMessage: error.messagen,
stackTrace: stackString,
path: url
};

// Display something to user
errorService.setError(errorObject);

// TODO: send to server
});

// IMPORTANT: Rethrow the error otherwise it gets swallowed
throw error;
}
}

我从: Global error handling angular 2 得到这个

我的问题是,当我在开发中运行它时,它会按预期工作,其中包含组件的有意义的堆栈跟踪:

例如:

ngOnInit()@webpack:///src/app/person/userdetail-page/userdetail-page.component.ts:29:19 __tryOrSetError()@webpack:///~/rxjs/Subscriber.js:247:0 this.__tryOrSetError()@webpack:///~/rxjs/Subscriber.js:187:0 _next()@webpack:///~/rxjs/Subscriber.js:125:0 next()@webpack:///~/rxjs/Subscriber.js:89:0 notifyNext()@webpack:///~/rxjs/operator/switchMap.js:124:0



但是在使用 angular cli 进行生产时: ng build --prod --aot
输出是相同的错误是:

property 'toString' of undefined TypeError: Cannot read property 'toString' of undefined at e._next (http://xxx.azurewebsites.net/main.b21b245638698421733f.bundle.js:1:5701) at e.__tryOrSetError (http://xxx.azurewebsites.net/vendor.1cd9b81fc017fd7eac16.bundle.js:835:16880) at e.next



所以这对我来说不是一个有意义的堆栈跟踪。如果我能得到导致问题的组件,为什么像在我的开发环境中一样??!

您如何处理生产站点中的错误?如果我在代码中的每个地方都 try catch ,我可以抛出特定类型的错误,但在没有 try catch block 的地方?

Stacktrace 应该始终显示导致错误的组件,而不仅仅是显示捆绑中未定义的 tostring!

最佳答案

你得到这个的原因是在运行命令 ng build --prod --aot 时。 .

构建使用捆绑和有限的 tree-shaking,而 --prod 构建还通过 UglifyJS 运行有限的死代码消除。

简而言之 - 所有错误日志都被缩小,以便减小包大小,即:这是我们在 Production build 中收到 uglified 错误消息的原因之一。

为了不发生这种情况,您可以使用此命令,但只能在测试时使用 ng serve --aot。或 ng serve --prod检查任何错误

The AOT compiler detects and reports template binding errors during the build step before users can see them.

关于 Angular 错误处理程序在 aot 包上包含组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46249741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com