Angular ng发球--prod投掷”;错误类型错误:(void 0)不是函数;

Angular ng发球--prod投掷”;错误类型错误:(void 0)不是函数;,angular,angular-cli,typeerror,aot,Angular,Angular Cli,Typeerror,Aot,所以当你在Angular CLI应用程序中遇到这个问题时 发生的情况如下: ng serve,ng serve--aot不产生异常,一切正常。仅在浏览应用程序时运行ng service--prod会中断 正在搜索答案,并找到了,所以我在应用程序中的每个属性之前都写了“public”,并检查提供者中是否有函数调用,但没有任何更改 接下来,我尝试使用--aot标志运行它,工作正常,但在--prod出现相同错误时仍然崩溃 它在运行登录过程时正好崩溃,即: 发送带有登录名和密码数据的http POS

所以当你在Angular CLI应用程序中遇到这个问题时

发生的情况如下:
ng serve
ng serve--aot
不产生异常,一切正常。仅在浏览应用程序时运行
ng service--prod
会中断

正在搜索答案,并找到了,所以我在应用程序中的每个属性之前都写了“public”,并检查提供者中是否有函数调用,但没有任何更改

接下来,我尝试使用
--aot
标志运行它,工作正常,但在
--prod
出现相同错误时仍然崩溃

它在运行登录过程时正好崩溃,即:

  • 发送带有登录名和密码数据的http POST
  • 如果请求得到解决,则发送ngRx存储自定义登录事件(简单标志)
  • 然后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之后,换句话说,我去掉了项目上唯一的弹出窗口,错误消失了。我已经用它自己的登录模式做了另一个组件,但是仍然认为删除整个工作模块是因为构建错误不是解决方案。 my 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文件。 如果发现任何程序包正在创建问题,请尝试将其删除以进行修复。

prod选项将激活项目文件夹中angular.json文件中的以下代码

      "configurations": {
        "production": {
          "fileReplacements": [
            {
              "replace": "src/environments/environment.ts",
              "with": "src/environments/environment.prod.ts"
            }

需要确保代码在从localhost:4200或任何开发服务器提供服务时正常工作,尤其是在安全性方面,因为它们通常与目标“prod”环境不同。

您需要使用以下语法:

ng serve --configuration production

您能确定您的生产构建部署成功吗?您的代码中应该有一些错误
ng serve
ng build
不会抛出打字错误或类似的错误,但当您执行
ng serve--prod
ng build--prod
时,它会抛出错误。我已经多次使用不同的选项在服务器上和本地构建和服务它,只使用
--prod
来服务,并产生此错误。终端在构建或服务时没有错误,它们只在浏览器中出现。我正在使用确切的命令
ng build--prod&&ng serve--prod
请尝试使用以下命令进行构建:
--environment prod
--aot true--output hashing all
提取css true
--命名块false
--build optimizertrue如果这些错误没有发生,则很可能是由
uglify.js
@ArseniyShelestyuk引起的。您是否找到了导致错误的原因?请尝试:ng build--configuration=production--source map