我在应用程序的开头添加了用于加载配置设置的代码,这些代码可供MSAL使用。
我正在关注以下示例: https://stackblitz.com/edit/angular6-intercom-issue-shhf69
它在dev(在VS中进行调试)...和在生产中(过去的某个时候)都非常有效。 我做了一些更改,当它变成天蓝色时,它停止了工作。
仅当我部署到生产环境(Azure应用程序服务)时,我才遇到问题。
这是错误:
未处理的承诺拒绝:找不到“ s”的NgModule元数据。 ;区域:任务:Promise.then;值:错误:找不到“ s”的NgModule元数据。
这是我的简化代码,显示了动态加载AppModule时遇到的问题。
main.ts
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import('./app/app.module').then(module => {
platformBrowserDynamic().bootstrapModule(module.AppModule).catch(err => console.error(err));
});
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 { }
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 { }
我浏览了许多文章,解释了问题是与引导模块有关,但是没有解决方案可以修复我的代码。
我的引导程序不是很简单(因为我从平时更改了它),但是它确实可以在开发人员中使用。
有人可以建议吗?
编辑1:
运行“ ng build --prod”时收到以下警告
未启用“惰性路由发现”中的警告。因为在主文件中既没有entryModule也没有静态可分析的引导程序代码。
编辑2:
这是引发错误的未缩小代码。
在抛出错误之前,我已经设置了一个断点...
bootstrapModule(t)
...然后您会在右侧看到t的值。
编辑3:
我设法删除了大部分代码,同时保留了错误,并更新了上面提供的代码。
对于那些可能会问为什么我需要动态加载'./app/app.module'并想知道为什么要这样做的人...
import('./app/app.module').then(module => {
platformBrowserDynamic().bootstrapModule(module.AppModule).catch(err => console.error(err));
});
...请查看我顶部链接的网站。我将其保留为这种形式,因为我知道这是导致问题的原因(但导入后无需在then()中使代码复杂化。但是(我认为)这是必需的。
编辑4:
这是(.NET内核中的)代码,可防止在我的本地系统上引发错误。如果我将其注释掉,该错误也会在本地引发。
spa.UseAngularCliServer(npmScript: "start");
答案 0 :(得分:2)
这不是最终的解决方案,但是如果在构建中禁用AOT,可以暂时在angular.json的生产配置中将其禁用。 至少直到您得到实际的解决方案为止。这样一来,您就可以使Azure网站同时运行。
"aot": false,
"buildOptimizer": false
这确实不是一个很好的解决方案,但是它将同时使您的Azure应用服务正常工作。