javascript - AngularJS - 忽略源映射的堆栈跟踪

标签 javascript angularjs source-maps

我已经编写了一个 AngularJS 应用程序,但事实证明调试它有点像噩梦。我正在使用 Grunt + uglify 来连接和缩小我的应用程序代码。它还会在缩小的 JS 文件旁边创建一个源映射。

当文件中存在 JS 错误时,源映射似乎可以正常工作,但在 AngularJS 应用程序之外。例如如果我在其中一个文件的顶部写入 console.log('a.b');,Chrome 调试器中记录的错误会显示原始文件的行 + 文件信息,而不是缩小后的文件一个。

当 Angular 自身运行的代码出现问题时(例如在 Controller 代码中),就会出现问题。我从 Angular 获得了一个很好的堆栈跟踪,但它只详细说明了缩小后的文件,而不是原始文件。

我能做些什么来让 Angular 确认源映射吗?

错误示例如下:

TypeError: Cannot call method 'getElement' of undefined
at Object.addMapControls (http://my-site/wp-content/plugins/my-maps/assets/js/app.min.js:1:2848)
at Object.g [as init] (http://my-site/wp-content/plugins/my-maps/assets/js/app.min.js:1:344)
at new a (http://my-site/wp-content/plugins/my-maps/assets/js/app.min.js:1:591)
at d (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.0-rc.2/angular.min.js:29:495)
at Object.instantiate (http://ajax.googleapis.com/ajax/libs/angularjs/1.2.0-rc.2/angular.min.js:30:123)

最佳答案

拉里法克斯的 answer很好,但记录的功能有一个改进版本 in the same issue report :

.config(function($provide) {

  // Fix sourcemaps
  // @url https://github.com/angular/angular.js/issues/5217#issuecomment-50993513
  $provide.decorator('$exceptionHandler', function($delegate) {
    return function(exception, cause) {
      $delegate(exception, cause);
      setTimeout(function() {
        throw exception;
      });
    };
  });
})

这将生成两个堆栈跟踪,如 Andrew Magee noted :一个由 Angular 格式化,然后另一个由浏览器格式化。第二个跟踪将应用 sourcemaps。禁用重复项可能不是一个好主意,因为您可能有其他 Angular 模块也可以处理异常,这些异常可以在此之后通过委托(delegate)调用。

关于javascript - AngularJS - 忽略源映射的堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19420604/

相关文章:

javascript - 在另一个 Ajax 请求中处理多个 Ajax 请求

webpack-dev-server 将哈希查询参数添加到 src 文件 URL

javascript - 如何在 create react app 中生成 sourcemaps?

javascript - 如何获得源映射以与 Chrome 开发工具和 webpack 一起使用?

javascript - 克隆 dojo float Pane

javascript - 页面加载动画

javascript - 独立的 Angular 脚本和数据位于单个文件中

javascript - 可以这样调用 prompt() 吗?

javascript - Uncaught Error : [$injector:modulerr] Failed to instantiate module polmgr due to

javascript - 如何在选中时打印复选框的名称?