在Angular 7生产构建中出现“Uncaught TypeError:Reflect.defineMetadata不是函数”的错误

26

我正在尝试将我使用Angular 7构建的生产版本部署到Azure。当我运行ng build时,我能够轻松地部署它,但是当我尝试完整的ng build --prod时,在控制台中会收到以下错误,并且页面无法加载。在本地主机服务器上运行应用程序时也会发生这种情况。

Uncaught TypeError: Reflect.defineMetadata is not a function

图片描述

我已经搜索过了,但是找不到关于这个确切错误的参考。我看到大多数结果都是这样的:Uncaught TypeError: Reflect.getMetadata is not a function

3个回答

52

确保已安装reflect-metadata。还可以尝试将此行添加到您的polyfills.ts文件中:

import 'reflect-metadata'

或者

import 'core-js/es7/reflect';
理想情况下,这个(第二个import语句)已经包含在polyfills.ts文件中了。
这样应该能使它正常工作。

太棒了,成功了。我只在我的polyfills.ts中导入了zone.js。谢谢你教给我新的东西! - CAlex
2
谢谢,我通过在 zone.js 导入之后使用 import 'reflect-metadata'(angular 8.2.x)解决了问题。 - timhecker
我在Angular 7.1.4中使用Elastic APM RUM代理时遇到了这个问题。解决方法如下: 在Polyfills.ts中添加import 'reflect-metadata';即可修复该错误。 - Alan Mark Kristensen

6

不要安装整个core-js,可以只安装

npm i reflect-metadata

然后只需在polyfills.js中进行导入。

import 'reflect-metadata';

在这种情况下,您不需要安装整个 core-js 库,因为只需要 reflect-metadata。 :)

5

由于Angular只需要在开发环境中使用,因此polyfills.ts中的导入现在不再包含在默认Angular项目中。

如果您需要polyfill,例如对于像class-transformer这样的模块,您可以将其添加到polyfills.ts中:

npm i core-js -S

import 'core-js/proposals/reflect-metadata';


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接