升级到 angular 12 后反映元数据错误

Reflect-metadata errors after upgrade to angular 12

Angular 12 autoupdate 从 tsconfig.json 中移除 "emitDecoratorMetadata": true 属性 并且应用程序的开发版本 (ng serve) 有错误:

ERROR Error: Uncaught (in promise): TypeError: can't access property "name", d is undefined

at vendor.js 文件在这个地方:

... d=Reflect.getMetadata("design:type",e,r),v=!!d.name&&d.name.toLowerCase()===t.Array ...

生产版本没有这个错误

tsconfig.json 处包含 "emitDecoratorMetadata": true 可消除此错误

安装并包含 polyfill reflect-metadata 没有帮助

临时解决方案:包括"emitDecoratorMetadata": true,但已弃用。

您可以尝试回滚到上一个可用版本。

或临时修复方法是将这些添加到您的 package.json 并将 @angular/Compiler-cli 的版本更改为与 @angular/core

完全相同的版本

"@angular/compiler-cli": "2.2.0", “反映元数据”:“^0.1.8”

和 运行ning ng 不要使用你的全局 angular-cli,而是将它添加到你的 package.json 和 运行 它与 npm。

"scripts": {
…
"build-my-app": "ng build --prod --aot --xyz"
},

然后 运行 它:

npm run build-my-app

外部依赖错误,严格要求emitDecoratorMetadata设置为true