在非ES5类上调用getInternalNameOfClass()时出现错误:期望AngularFireModule具有内部类声明。

46
Terminal -

    "WARNING in Invalid constructor parameter decorator in D:/New folder/SilverLife/node_modules/@angular/fire/fesm2015/angular-fire.js:
     () => [
        { type: Object, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }
    ]
    
    ERROR in getInternalNameOfClass() called on a non-ES5 class: expected
    AngularFireModule to have an inner class declaration"

在将Angular Firebase集成到我的Angular 9项目中时,我遇到了这个问题。 我的应用程序的package.json


7
请勿在 Stack Overflow 上分享文字图片。请将文本复制到问题本身中,并格式化以便于阅读、复制和搜索。 - Doug Stevenson
我也遇到了同样的问题,并在AngularFire GitHub存储库中找到了这个开放问题。将版本降级到6.0.0对我没有起作用。https://github.com/angular/angularfire/issues/2521 - Luis Cabrera
3个回答

86

请尝试将tsconfig.json中的compilerOptions中的targetes5更改为es2015


3
如果你将设置为´es2015´,它在IE 11中将无法工作,正如您可以在此帖子中看到的 https://medium.com/angular-in-depth/angular-and-internet-explorer-a6e4b5a5dae1 - apaternina
6
@apaternina 是时候停止支持 IE 11 了,甚至微软也倾向于这样做:https://techcommunity.microsoft.com/t5/microsoft-365-blog/microsoft-365-apps-say-farewell-to-internet-explorer-11-and/ba-p/1591666 - JBeen
但是这个解决方案真的有效吗?我遇到了OwlDateTimeIntl相同的问题。它说:-“在工作程序#2上出现错误:错误:在非ES5类上调用getInternalNameOfClass():预期OwlDateTimeIntl有一个内部类声明 在Esm5ReflectionHost.getInternalNameOfClass处。” - Chetan Oswal
这在ng9中对我也没有用。@iLoveUnicorns的postinstall起作用了。https://dev59.com/6FIG5IYBdhLWcg3w01Hj - Guntram
这在我的ng 9中没有起作用。这里是开放问题https://github.com/highcharts/highcharts-angular/issues/261 - Nirav Shah

54

在从Angular8迁移到Angular9的过程中,我遇到了同样的问题。

在Angular9中,他们推出了一个名为Angular Ivy的新一代编译和渲染管道。文档上说:

Ivy应用程序可以使用通过View Engine编译器创建的库构建。这种兼容性是由一个称为Angular兼容性编译器(ngcc)的工具提供的。在进行Angular构建时,CLI命令根据需要运行ngcc。

来源:https://angular.io/guide/ivy

因此,为了让 "target": "es5" 的项目工作,在使用 npm install 后,您必须运行 ngcc。

您可以将其添加到 package.json 文件中:

{
  "scripts": {
    "postinstall": "ngcc"
  }
}

运行npm install后,它应该会自动运行。


1
尽管被接受的答案有效,但对于一些依赖外部模块的情况,其中实际上需要 es2015 的更改将不起作用。这个方法可以解决。 - Bhavik Patel
1
你的回答让我明白了问题来自于Ivy,所以我只需通过angularCompilerOptions/enableIvy: false将其禁用。显然,我们将来必须升级整个项目到Ivy,但现在它可以工作了。 - Hadrien01
解决方案运行良好,但由于构建过程正在以root身份运行,因此我需要使用--unsafe-perm标志(npm install --unsafe-perm)。 Yassine Khachlek在这里提到了--unsafe-perm。有关--unsafe-perm的更多信息,请参见此处 - Fábio Magagnin

2

我必须在 tsconfig.json 中使用以下内容:

  "angularCompilerOptions": {
    "enableIvy": false,
  }

虽不是最理想的方式,但它可行。

添加

  "scripts": {
    "postinstall": "ngcc"
  }

target 在 tsconfig.json 中更改为 es2015 并在 package.json 中进行打包操作并不能解决问题 - 可能还有其他设置干扰了它们。


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