构建Angular应用时出现‘No NgModule metadata found for 'class{}'’错误
解决Angular生产构建中"No NgModule metadata found for 'class{}'"错误
我帮你分析了代码里的问题,核心原因和修复步骤如下:
核心错误原因
在main.ts的environment.library分支中,你尝试引导MainModule,但没有在文件顶部导入MainModule,导致MainModule变量未定义。Angular尝试引导一个空对象,因此抛出了No NgModule metadata found for 'class{}'的错误。
具体修复步骤
1. 修复main.ts的导入问题
在main.ts顶部添加MainModule的导入语句,确保变量能被正确识别:
import { enableProdMode } from '@angular/core'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { AppModule } from './app/app.module'; import { MainModule } from './app/main.module'; // 新增这行导入 import { LibrModule } from './app/libr.module'; import 'zone.js'; import { environment } from './environments/environment'; if (environment.production) { enableProdMode(); } if(environment.library) { platformBrowserDynamic().bootstrapModule(MainModule) .catch(err => console.error(err)); } else { platformBrowserDynamic().bootstrapModule(AppModule) .catch(err => console.error(err)); }
2. 调整MainModule的bootstrap配置(可选,根据library模式需求)
如果library模式需要单独运行应用,需要把AppComponent加入MainModule的bootstrap数组,让Angular知道要启动哪个根组件:
@NgModule({ declarations: [ AppComponent, DashboardComponent, ... LinkAccountComponent, DiscoverAccountComponent ], imports: [ BrowserModule, BrowserAnimationsModule, HttpClientModule, AppRoutingModule, SharedModule, ], providers: [], bootstrap: [AppComponent], // 新增根组件配置 exports: [ // 只导出需要在外部模块使用的组件,不需要导出导入的模块(如AppRoutingModule、SharedModule) AppComponent, DashboardComponent, ... ] }) export class MainModule {}
3. 清理MainModule的exports数组
移除exports中的AppRoutingModule和SharedModule,因为这些是你已经导入的模块,不需要再次导出(除非你明确要让导入MainModule的模块直接使用它们的导出内容)。
验证修复
完成上述调整后,重新执行ng build --prod命令,应该就能正常完成生产构建了。
内容的提问来源于stack exchange,提问作者Sai
相关产品推荐
相关产品推荐

