所有
我对Angular2很新,我发现在Chrome中调试比Angular1更难(这只是我的感觉,当我按照Angular2官方网站上的教程,当代码出错时,大部分时间,控制台输出来自system.js或angular.dev.js等,我不记得是什么js文件命名那些错误,但有一件事是大部分时间,它无法指出错误产生的真实位置)。
我想知道在哪里可以找到关于如何在Chrome for Angular2中追溯错误的教程?
由于
答案 0 :(得分:10)
事实上,调试Angular2应用程序比Angular1应用程序有点棘手,因为它涉及几个额外的机制:
此外,还需要其他工具,如SystemJS来处理模块。
也就是说,您可以利用IDE和Dev Tools来帮助找出问题。
让我们来看一些经典错误。
导入不存在的模块
代码:
import {Component} from 'angular2/angular2'; // <-------
@Component({
selector: 'my-app',
template: `
(...)
`
})
export class AppComponent {
}
错误:
angular2-polyfills.js:1243 Uncaught SyntaxError: Unexpected token <
Evaluating http://localhost:3000/angular2/angular2
Error loading http://localhost:3000/app/boot.js
解释:如果您查看“网络”选项卡,您将看到http://localhost:3000/angular2/angular2
请求收到404状态代码,响应有效内容为HTML。 SystemJS尝试将此代码评估为JavaScript。这就是你得到语法错误的原因。
当找不到模块时,SystemJS会尝试从URL加载它。如果没有相关配置(在package
块内,map
块),则只需使用/
Angular2捆绑的JS文件丢失
代码:
import {Component} from 'angular2/core';
import {Http} from 'angular2/http'; // <-----
@Component({
selector: 'my-app',
template: `
<div>Test</div>
`
})
export class AppComponent {
constructor(private http:Http) {
}
}
错误:
angular2-polyfills.js:1243 Uncaught SyntaxError: Unexpected token <
Evaluating http://localhost:3000/angular2/http
Error loading http://localhost:3000/app/boot.js
解释:它类似于上一个问题。添加http.dev.js文件时,angular/http
模块将使用System.register
自动在SystemJS上注册。如果它不存在,SystemJS会尝试使用HTTP请求加载它。
加载模块的SystemJS配置错误
代码:
import {Component,Inject} from 'angular2/core';
import {TranslateService,TranslateStaticLoader,TranslateLoader} from 'ng2-translate/ng2-translate';
@Component({
selector: 'first-app',
template: `
(...)
`
})
export class AppComponent {
constructor(translate:TranslateService) {
}
}
错误:
TypeError: Cannot read property 'getOptional' of undefined at runAppInitializers (localhost:8000/angular2.dev.js:12628:25) at PlatformRef.initApp
解释:在这种情况下,错误消息不提供提示。我们需要测试一下,以便在组件构造函数中添加translate:TranslateService
时发现问题。因此,它与ng2-translate
的加载有关,可能与SystemJS中的配置有关。请参阅此问题:ng2-translate: TranslateService and Error: Cannot read property 'getOptional' of undefined(…)。
导入中的元素错误
代码:
import {Component1} from 'angular2/core'; // <-----
@Component1({
selector: 'my-shop',
template: `
(...)
`
})
export class AppComponent {
}
错误:
angular2-polyfills.js:1243 Error: core_1.Component1 is not a function(…)
解释:Component
不是angular2/core
模块导出的内容。当然,这里显而易见,但我们在错误消息中没有非常有用的提示。很难找到大型代码库。对于此类用例,您应该利用IDE(即使在Sublime中使用TypeScript插件),因为它会显示错误。这是我在这种情况下的错误:
Module '".../node_modules/angular2/core"' has no exported member 'Component1'. Line 16, Column 16
执行处理时出错。
代码:
import {Component} from 'angular2/core';
@Component({
selector: 'my-app',
template: `
<div>Test</div>
`
})
export class AppComponent {
constructor() {
this.test.test();
}
}
错误:
angular2.dev.js:23083 TypeError: Cannot read property 'test' of undefined
at new AppComponent (app-component.ts:33)
at angular2.dev.js:1412
at Injector._instantiate (angular2.dev.js:11453)
解释:我认为这是一个容易修复的错误,因为您有TypeScript文件中出现错误的行。不要忘记启用sourceMap
以便能够在已编译的JS文件和TypeScript源文件之间使用行映射。
使用ES6代替TypeScript
代码:
@Page({
templateUrl: 'build/pages/list/list.html'
})
export class ListPage {
constructor(nav: NavController){
this.nav = nav;
}
}
错误:
/app/pages/list/list.js Module build failed: SyntaxError: /focus/projects/ionic-todo/app/pages/list/list.js:
Unexpected token (10:17) 8 | 9 | export class ListPage {
10 | constructor(nav: NavController){ | ^ 11 | this.nav = nav; 12 | 13 | this.items = [
解释:似乎问题出现在:
字符的构造函数参数定义的级别上。 ES6支持类但不支持方法级别的类型...请参阅此问题:Ionic 2 Syntax Error While Compiling TypeScript
答案 1 :(得分:8)
Augury现在也是官方支持的用于Angular 2调试的Chrome devtool扩展。
这篇文章更深入地讨论了这个主题Debugging Angular 2 Applications from the Console
答案 2 :(得分:5)
你可以参考这个链接,它将为你提供在chrome中调试Angular2的完整指南,这真的非常有帮助。
答案 3 :(得分:1)
对于Chrome用户,您可以使用chrome提供的开发人员工具调试代码。只需按F12键即可将其打开
点击此链接查看图片 - &gt; Debugging code of angular 2 using chrome developer tools
打开开发人员工具后,转到“来源”标签, 当角度应用程序运行时,所有角度文件都进入webpack文件夹。您可以在角度组件文件中使用断点来调试代码。
答案 4 :(得分:0)
Augury赞DevTools
安装Augury
安装Augury的最佳方法是使用chrome web store。在侧面板中选择扩展,在搜索字段中键入“ Augury”,然后按Enter。
当您单击“添加到Chrome”时,将弹出一个弹出窗口。选择“添加扩展名”以完成该过程。成功安装插件后,浏览器中地址栏旁边将出现一个Augury图标。
Augury图标提供其他信息。立即单击图标以查找内容。
使用Augury
要开始使用Augury,必须在浏览器中运行Angular应用程序以进行检查。如果您从未调试过JavaScript应用程序,则可能没有意识到每个现代Web浏览器都直接在浏览器中提供了调试环境。 DevTools,使用以下快捷方式打开调试环境:
Augury功能
我们将快速介绍Augury中可用的主要功能。这是为了熟悉这些功能以及在需要时如何定位它们。
第一个可见的视图是“组件树”,其中显示了属于该应用程序的已加载组件。