因此,当在Angular-CLI应用程序中遇到此问题时。
这是发生了什么:ng serve
,ng serve --aot
不产生异常,一切正常。在浏览应用程序时,仅运行ng serve --prod
会中断。
ERROR TypeError: (void 0) is not a function
正在寻找答案,并找到了these dont's,因此我在应用程序中的每个属性之前都写了“ public”,并检查了提供程序中是否存在函数调用,但没有发生任何变化。
接下来,我尝试使用--aot
标志运行它,并且工作正常,但在--prod
时仍然崩溃,并出现相同的错误。
它在运行runnig登录过程时完全崩溃:
发送带有登录名和密码数据的http POST
如果请求解决,则调度ngRx-Store自定义登录事件(简单标志)
然后router.navigateByUrl到另一个页面
奇怪的是我到处都有类似的过程,但是它在确切的位置崩溃了。
能否请某人向我提供一些信息,但接下来我应该在哪里挖掘呢?
干杯!
更新:我在登录过程的每个部分都截断了代码,然后使用--prod
构建它,结果发现@ angular / material的MatDialog产生了错误。 MatDialog登录组件使用afterClosed()钩子解析到其父级后,触发了登录,并以某种方式产生异常。
因此,触发弹出窗口的父对象是HeaderComponent,它包含以下方法:
openLoginDialog(): void {
this.authService.login();
const dialogRef = this.dialog.open(LoginDialogComponent);
dialogRef.afterClosed().subscribe(result => {
if (result) {
this.authService.login();
}
});
}
在LoginDialogComponent内部是简单地解决以下问题的方法:
login(login, password) {
this.authService.tryLogin(login, password).subscribe(data => {
this.dialogRef.close(true);
});
}
换句话说,我删除MatDialog摆脱了项目上唯一的弹出窗口后,错误消失了。我用自己的“登录”表单制作了另一个组件,但仍认为由于构建错误而导致删除整个工作模块不是解决方案。
我的package.json:
"dependencies": {
"@angular/animations": "^5.0.2",
"@angular/cdk": "^5.0.0-rc.1",
"@angular/common": "^5.0.0",
"@angular/compiler": "^5.0.0",
"@angular/core": "^5.0.0",
"@angular/flex-layout": "^2.0.0-beta.10-4905443",
"@angular/forms": "^5.0.0",
"@angular/http": "^5.0.0",
"@angular/material": "^5.0.0-rc.1",
"@angular/platform-browser": "^5.0.0",
"@angular/platform-browser-dynamic": "^5.0.0",
"@angular/platform-server": "^5.0.0",
"@angular/router": "^5.0.0",
"@ngrx/store": "^5.0.0",
"@nguniversal/common": "^5.0.0-beta.5",
"@nguniversal/express-engine": "^5.0.0-beta.5",
"@nguniversal/module-map-ngfactory-loader": "^5.0.0-beta.5",
"core-js": "^2.4.1",
"hammerjs": "^2.0.8",
"ngrx-store-freeze": "^0.2.0",
"primeng": "^5.0.2",
"rxjs": "^5.5.2",
"tassign": "^1.0.0",
"zone.js": "^0.8.14"
},
"devDependencies": {
"@angular/cli": "^1.6.2",
"@angular/compiler-cli": "^5.0.0",
"@angular/language-service": "^5.0.0",
"@types/jasmine": "~2.5.53",
"@types/jasminewd2": "~2.0.2",
"@types/node": "~6.0.60",
"codelyzer": "~3.2.0",
"jasmine-core": "~2.6.2",
"jasmine-spec-reporter": "~4.1.0",
"karma": "~1.7.0",
"karma-chrome-launcher": "~2.1.1",
"karma-cli": "~1.0.1",
"karma-coverage-istanbul-reporter": "^1.2.1",
"karma-jasmine": "~1.1.0",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.1.2",
"ts-loader": "^2.3.7",
"ts-node": "~3.2.0",
"tslint": "~5.7.0",
"typescript": "~2.4.2"
}
最佳答案
您可以通过单击以下命令来检查确切的问题在哪里。
ng build --prod --source-map=true
有可能您不会锻炼,但我希望可以。
此问题背后的原因是捆绑了一个已经缩小的js文件。
如果您发现任何软件包造成了问题,请尝试将其删除以进行修复。