Angular cli build prod: TypeError: Cannot read property 'kind' of undefined

Angular cli build prod: TypeError: Cannot read property 'kind' of undefined

我尝试使用 Angular CLI ng build --prod 构建项目,但出现此错误:

ERROR in TypeError: Cannot read property 'kind' of undefined

如果我构建时没有 --prod 我不会收到任何错误

完整错误:

ERROR in TypeError: Cannot read property 'kind' of undefined
    at isParameterPropertyDeclaration (node_modules/typescript/lib/typescript.js:13445:88)
    at Object.filter (node_modules/typescript/lib/typescript.js:469:31)
    at transformClassMembers (node_modules/typescript/lib/typescript.js:70813:20)
    at createClassDeclarationHeadWithoutDecorators (node_modules/typescript/lib/typescript.js:70665:110)
    at visitClassDeclaration (node_modules/typescript/lib/typescript.js:70584:19)
    at visitTypeScript (node_modules/typescript/lib/typescript.js:70432:28)
    at visitorWorker (node_modules/typescript/lib/typescript.js:70227:24)
    at sourceElementVisitorWorker (node_modules/typescript/lib/typescript.js:70252:28)
    at saveStateAndInvoke (node_modules/typescript/lib/typescript.js:70165:27)
    at sourceElementVisitor (node_modules/typescript/lib/typescript.js:70237:20)
    at visitNodes (node_modules/typescript/lib/typescript.js:67751:48)
    at Object.visitLexicalEnvironment (node_modules/typescript/lib/typescript.js:67784:22)
    at visitSourceFile (node_modules/typescript/lib/typescript.js:70521:53)
    at saveStateAndInvoke (node_modules/typescript/lib/typescript.js:70165:27)
    at transformSourceFile (node_modules/typescript/lib/typescript.js:70147:27)
    at transformSourceFileOrBundle (node_modules/typescript/lib/typescript.js:70127:20)

Angular版本:

Angular CLI: 8.3.3
Node: 12.9.0
OS: darwin x64
Angular: 9.0.0-next.5
... animations, common, compiler, compiler-cli, core, forms
... language-service, localize, platform-browser
... platform-browser-dynamic, router

Package                            Version
------------------------------------------------------------
@angular-devkit/architect          0.900.0-next.3
@angular-devkit/build-angular      0.900.0-next.3
@angular-devkit/build-optimizer    0.900.0-next.3
@angular-devkit/build-webpack      0.900.0-next.3
@angular-devkit/core               9.0.0-next.3
@angular-devkit/schematics         8.3.3
@angular/cdk                       8.1.4
@angular/cli                       8.3.3
@angular/http                      8.0.0-beta.10
@angular/material                  8.1.4
@angular/material-moment-adapter   8.1.4
@ngtools/webpack                   9.0.0-next.3
@schematics/angular                8.3.3
@schematics/update                 0.803.3
rxjs                               6.5.3
typescript                         3.6.3
webpack                            4.39.3

谢谢。

现在记住 TypeScript 3.6.4 已经出来了。不过,阅读下面没有真正工作的内容是可以的。

TypeScript <= 3.6.3 出现了这个问题,Handle parentless nodes in isParameterPropertyDeclaration

如果您安装 3.7dev 或新的 beta),它将正常编译。


注意:如果您在构建时收到关于 TS 版本的 ERROR,只需通过 tsconfig 将其禁用即可。
为此使用 disableTypeScriptVersionCheck

"angularCompilerOptions": {
  "disableTypeScriptVersionCheck": true
},
"compilerOptions": {
 ...

如果出现任何其他问题,请关注评论的聊天。

尽管该问题明确指出 isParameterPropertyDeclaration 是错误的来源,但在搜索以下非常相似的错误时,此问题是唯一由 Google 链接的问题:

ERROR in ./node_modules/some_library/...
Module build failed (from ./node_modules/@angular-devkit/build-optimizer/src/build-optimizer/webpack-loader.js):
TypeError: Cannot read property 'kind' of undefined

由于找不到对上述错误的任何好的答案,所以我将其张贴在这里以供参考。

如果您正在使用受此错误影响的库,您应该将 @angular/cli 版本升级到 8 或在生产模式下禁用优化(要禁用优化,请将 projects.your_project_name.architect.build.configurations.production.optimizationtruefalse).

如果您是试图完全支持 Angular 版本 6 和 7 的图书馆所有者,请在图书馆的 tsconfig.json 中将 compilerOptions.emitDecoratorMetadata 设置为 true并重新编译。由于现在您要从装饰器中导出所有元数据,Angular 将对导出的元数据执行 .kind,解决 undefined.

的问题

我遇到了同样的问题并通过将我的 typescript 依赖项更新到最新的稳定版本解决了这个问题。

在我的例子中,我有版本 3.7,我通过升级到 3.8 来解决问题。

很多情况下都会出现此问题,主要原因之一是@angular/cli 的安装版本与@angular/cli 的全局安装版本不同,确保两者是相同的版本。在其他情况下,您必须更新 devkit。

请看看这些线程,你会得到一个想法:

  1. https://github.com/angular/angular-cli/issues/13172
  2. https://github.com/angular/angular-cli/issues/13861

当我将 ng-recaptcha v6.0.2 与 angular v6.2.2

一起使用时,我 运行 参与其中

对我来说,解决方法是在 angular.json

中将 buildOptimizer 设置为 false
"configurations": {
    "development": {
        "buildOptimizer": false
    }
}