找不到“ s”的NgModule元数据。(仅生产)

Bea*_*kie 8 angular

我在应用程序的开头添加了用于加载配置设置的代码,这些代码可供MSAL使用。

我正在关注以下示例:https : //stackblitz.com/edit/angular6-intercom-issue-shhf69

它在dev(在VS中进行调试)中非常有效……并在生产中(在过去的某个时候)起作用。我做了一些更改,当它变成天蓝色时它停止工作。

仅当我部署到生产环境(Azure应用程序服务)时,我才遇到问题。

这是错误:

未处理的承诺拒绝:找不到“ s”的NgModule元数据。; 区域:任务:Promise.then; 值:错误:找不到“ s”的NgModule元数据。

错误

这是我的简化代码,显示了动态加载AppModule时遇到的问题。

主要

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

import('./app/app.module').then(module => {

  platformBrowserDynamic().bootstrapModule(module.AppModule).catch(err => console.error(err));

});
Run Code Online (Sandbox Code Playgroud)

app.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';

import { DashboardModule } from './components/dashboard/dashboard.module';

@NgModule({
  declarations: [
    AppComponent,
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    DashboardModule,
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)

app-routing.module.ts (请注意,为了方便阅读,我删除了一些基于页面的模块)

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

import { DashboardComponent } from './components/dashboard/dashboard/dashboard.component';

const routes: Routes = [
  { path: '', component: DashboardComponent },
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }
Run Code Online (Sandbox Code Playgroud)

我阅读了许多文章,解释了问题是与引导模块有关,但是没有解决方案可以修复我的代码。

我的引导程序并不简单(因为我从平时进行了更改),但是在开发人员中确实起作用。

任何人都可以请教吗?


编辑1:

运行“ ng build --prod”时收到以下警告

未启用“惰性路由发现”中的警告。因为在主文件中既没有entryModule也没有静态可分析的引导程序代码。

编辑2:

这是引发错误的未缩小代码。

我在它引发错误之前立即设置了一个断点...

bootstrapModule(t)
Run Code Online (Sandbox Code Playgroud)

...您会在右侧看到t的值。

在此处输入图片说明

编辑3:

我设法删除了大部分代码,同时保留了错误,并更新了上面提供的代码。

对于那些可能会问为什么我需要动态加载'./app/app.module'并想知道为什么要这样做的人...

import('./app/app.module').then(module => {

  platformBrowserDynamic().bootstrapModule(module.AppModule).catch(err => console.error(err));

});
Run Code Online (Sandbox Code Playgroud)

...请查看我顶部链接的网站。我将其保留为这种形式,因为我知道这是导致问题的原因(但导入后无需在then()中使代码复杂化。但是,这是必需的(我相信)。

编辑4:

这是(来自.NET核心的)代码,可防止将错误引发到我的本地系统上。如果我将其注释掉,该错误也会在本地抛出。

spa.UseAngularCliServer(npmScript: "start");
Run Code Online (Sandbox Code Playgroud)

小智 2

这不是\xe2\x80\x99t 最终解决方案,但如果在构建中禁用 AOT 有效,您可以暂时在 angular.json 的生产配置中禁用它。\n至少在你得到实际的解决方案之前。这将使您的 Azure 站点同时正常运行。

\n\n
    "aot": false,\n    "buildOptimizer": false\n
Run Code Online (Sandbox Code Playgroud)\n\n

它确实不是一个很好的解决方案,但它会让您的 Azure 应用服务同时工作。

\n