ng serve --prod throws" ERROR TypeError:(void 0)不是函数"

时间:2018-03-14 11:04:32

标签: angular angular-cli typeerror aot

所以当在Angular-CLI app中遇到这个麻烦时。

以下是发生的事情: ng serveng serve --aot没有例外,一切正常。只有在浏览应用时才会运行ng serve --prod

ERROR TypeError: (void 0) is not a function

正在寻找答案,并找到了these dont's,所以我写了“公共'在应用程序中的每个属性之前,检查提供程序中是否有函数调用,但没有任何更改。

接下来,我尝试使用--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后,另一个单词摆脱了项目中唯一的弹出窗口,错误消失了。我已经创建了另一个具有自己的Login表单路径的组件,但仍然认为删除整个工作模块是因为构建错误不是解决方案。

我的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"
  }

3 个答案:

答案 0 :(得分:0)

您可以通过单击以下命令来检查确切的问题所在。

    ColumnLetter3 = Split(Cells(1, c1_column).Address, "$")(1)
    ColumnLetter4 = Split(Cells(1, c6_column).Address, "$")(1)
    Range3 = ColumnLetter3 & st_workrow2 + 1 & ":" & ColumnLetter4 & last_cell1
    Set xrng3 = Range(Range3)

    If Not Application.Intersect(xrng3, Range(Target.Address)) _
        Is Nothing Then

        For i = c_row + 1 To last_cell1
        If Cells(i, c1_column) = "" And Cells(i, c2_column) = "" And Cells(i, c3_column) = "" And Cells(i, c4_column) = "" And Cells(i, c5_column) = "" And Cells(i, c6_column) = "" Then
        Cells(i, c_column) = ""
            Else
            Cells(i, c_column) = Cells(i, c1_column) & "-" & Cells(i, c2_column) & "-" & Cells(i, c3_column) & "-" & Cells(i, c4_column) & "-" & Cells(i, c5_column) & "-" & Cells(i, c6_column)
            Cells(i, c_column).Replace what:="+", Replacement:=""
            Cells(i, c_column).Replace what:="-----", Replacement:="-"
            Cells(i, c_column).Replace what:="----", Replacement:="-"
            Cells(i, c_column).Replace what:="---", Replacement:="-"
            Cells(i, c_column).Replace what:="--", Replacement:="-"
            If Right(Cells(i, c_column), 1) = "-" Then
                l = Len(Cells(i, c_column))
                Cells(i, c_column) = Left(Cells(i, c_column), l - 1)
            End If
            If Left(Cells(i, c_column), 1) = "-" Then
                l = Len(Cells(i, c_column))
                Cells(i, c_column) = Right(Cells(i, c_column), l - 1)
            End If
        End If
    Next I
    Endif

有可能您不会锻炼,但我希望可以。 此问题背后的原因是捆绑了一个已经缩小的js文件。 如果发现任何软件包造成了问题,请尝试将其删除以解决问题。

答案 1 :(得分:0)

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

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

需要确保从localhost:4200或任何开发服务器提供的代码都能正常工作,尤其是具有安全性,因为它们通常不同于目标“产品”环境。

答案 2 :(得分:0)

您需要使用以下语法:

ng serve --configuration production