如何防止this.debug is not a function导致编译器退出

How can we prevent this.debug is not a function from causing the compiler to exit

参考此处提出的问题 this.debug is not a function 只是一个副作用是正确的,但是这样的错误会导致编译器在开发过程中停止(在观看时)。

如何防止此类错误的发生?

此外,它有时只是随机地停止,见下面的截图,它显示编译完成,然后 angular 正在监听,然后在我刷新 UI 后,它只是简单地停止了,没有任何错误。

我认为这可能与 nguniversal 有关,我创建了 https://github.com/angular/universal/issues/2200 问题。我真的希望任何人都能真正提供帮助。

当我 运行 ng run serve-ssr 时,我希望 angular 服务器将 运行 并观察变化,并且根据我的变化,它会重建(它确实非常棒)但是所有这些都会一直持续到发生错误或代码错误为止。从这个意义上讲,它会停止并退出。

我不知道这是否是一个错误,我刚刚将我的 angular 升级到 12 并将 nguniversal 升级到 v12 希望这个问题会消失,但它没有,我也没有知道去哪里了。

我正在从事一个复杂的项目,需要花费一些时间从头开始编译。当 运行 在开发环境中发生意外并写错了东西时,我会得到那个错误的错误然后 this.debug is not a function 消息会出现然后 watch/compiler 会停止.

angular.json:

"server": {
          "builder": "@angular-devkit/build-angular:server",
          "options": {
            "outputPath": "dist/server",
            "main": "server.ts",
            "tsConfig": "tsconfig.server.json",
            "sourceMap": true,
            "optimization": false
          },
          "defaultConfiguration": ""
        },
"build-for-ssr": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            "outputPath": "dist/browser",
            "index": "src/index.template.html",
            "main": "src/main.browser.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "src/tsconfig.app.json",
            "aot": false,
            "assets": [
              "src/favicon.ico",
              "src/manifest.json",
              "src/assets",
              {
                "glob": "**/*",
                "input": "node_modules/intro.js",
                "output": "./assets/intro.js/"
              },
              { "glob": "**/*", "input": "node_modules/monaco-editor", "output": "assets/monaco-editor" }
            ],
            "styles": [
              "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css",
              "src/styles.scss",
              "node_modules/intro.js/introjs.css"
            ],
            "scripts": ["node_modules/intro.js/intro.js"],
            "vendorChunk": true,
            "extractLicenses": false,
            "buildOptimizer": false,
            "sourceMap": true,
            "optimization": false,
            "namedChunks": true
          },
          "defaultConfiguration": ""
        },
"serve-ssr": {
          "builder": "@nguniversal/builders:ssr-dev-server",
          "options": {
            "browserTarget": "build-for-ssr",
            "serverTarget": "server"
          },
        },

我根据 this comment 解决了这个问题,我在这个文件 universal/modules/builders/src/ssr-dev-server/utils.ts 中将 return attempts > 10 || !allowedErrorCodes.includes(error.code) 更新为 return attempts > 10000 || !allowedErrorCodes.includes(error.code),从那以后,我没有遇到当代码中的错误完成时,编译器退出或在开发过程中被中断。

唯一的技巧,如果您 运行 ng run serve-ssr 代码有问题,这不会影响。你仍然会得到 this.debug is not a function。但是一旦它被修复并且你 运行 它。无论您在代码中犯了什么错误,它都不会被打断。