在我的模块上运行ngc时,它使用angular 4.4.3(和编译器4.4.3)工作正常.现在我升级到5.0.0(角度和编译器),我有以下错误:
Error: Illegal state: Could not load the summary for directive NgClass in […]/node_modules/@angular/common/common.d.ts.
我的tsconfig.json文件如下所示:
{ "compilerOptions": { "baseUrl": ".","declaration": true,"stripInternal": true,"experimentalDecorators": true,"emitDecoratorMetadata": true,"module": "es2015","moduleResolution": "node","outDir": "[...]/","paths": {...},"rootDir": "[...]/plugins/","target": "es5","skipLibCheck": true,"lib": [ "es2015","dom" ],"sourceMap": true,"inlineSources": true,"noImplicitAny": true },"files": [ "[...]/plugins/users/index.ts" ] }
我不知道从我试图编译的文件中导致问题的原因是什么.我在这里和那里看到过类似的错误,但是直接与公共模块无关.发布样本以重现错误很困难,因为它不会发生在其他模块上
编辑1:
我的设置如下:一个模块MyModuleA成功构建,MyModuleB使用不构建的MyModuleA.
@NgModule({ imports: [ CommonModule,IonicModule,TranslateModule.forChild() ] }) export class MyModuleA { static forRoot(): ModuleWithProviders { return { ngModule: MyModuleA,providers: [ ModuleAService ] }; } } @NgModule({ imports: [ HttpClientModule,MyModuleA ] }) export class MyModuleB { /** * Instantiate module (for main module only). */ static forRoot(): ModuleWithProviders { return { ngModule: MyModuleB,providers: [ ModuleBService ] } } }
如果我在MyModuleB中包含CommonModule,我还有另一个错误:
Error: Illegal state: Could not load the summary for directive ActionSheetCmp in [...]/node_modules/ionic-angular/components/action-sheet/action-sheet-component.d.ts
现在我可以在MyModuleB中包含IonicModule以获得下一个非法状态错误(这次链接到translate模块),但我在MyModuleB中根本没有使用这些模块,那么为什么我需要将它们全部导入呢?
解决方法
所以我不确定这背后的原因是什么,这很烦人,但似乎每个导入的模块都需要由子模块导入或从父模块导出.所以在我的例子中,解决方案是:
@NgModule({ imports: [ CommonModule,TranslateModule.forChild() ],exports: [ CommonModule,TranslateModule ] }) export class MyModuleA { static forRoot(): ModuleWithProviders { return { ngModule: MyModuleA,providers: [ ModuleBService ] } } }
如果有人知道为什么,请随时赐教:)