我在应用程序的开头添加了用于加载配置设置的代码,这些代码可供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 归档时间: |
|
查看次数: |
266 次 |
最近记录: |