网站搜索

typescript - Angular 6 在模块内访问服务时出现错误 '模块没有导出成员'


我建立了一个库,在其中导出了一些模块和服务,如下所示

export class ThemeLibModule {
  static forRoot(): ModuleWithProviders {
    return <ModuleWithProviders>{
      ngModule: ThemeLibModule,
      providers: [
        BaThemeConfigProvider,
        BaThemeConfig,
        GlobalState,
        ...NGA_VALIDATORS,
        ...NGA_SERVICES,
      ],
    };
  }

const NGA_SERVICES = [BaImageLoaderService,BaThemePreloader,BaThemeSpinner,BaMenuService,];

theme-lib 是已发布库的名称。我在另一个应用程序中如下使用此库:

app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { HttpModule } from '@angular/http';
import {ThemeLibModule} from 'theme-lib';


@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    ThemeLibModule.forRoot(),
    HttpClientModule,
    HttpModule,
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

我如何访问在构建库时导出的各种服务?

当我尝试 import {BaMenuService} from 'theme-lib'; 时,它报错为 "Lib 没有导出名为 BaMenuService 的成员"。

这就是 theme-lib.d.ts 的样子,我确实看到了导出的各种模块和服务。不确定为什么会出现“Lib 没有导出成员错误”。

/**
 * Generated bundle index. Do not edit.
 */
export * from './public_api';
export { AppTranslationModule as ɵbn, createTranslateLoader as ɵbm } from './lib/app.translation.module';
export { BaThemeConfigProvider as ɵl } from './lib/theme';
export { AutoCompleteComponent as ɵbk, BaBackTop as ɵm, BaBreadCrumb as ɵba, BaCancelButtonComponent as ɵbd, BaCard as ɵn, BaChartistChart as ɵo, BaCheckbox as ɵp, BaClearButtonComponent as ɵbg, BaContentTop as ɵq, BaFileUploader as ɵz, BaFullCalendar as ɵr, BaMenu as ɵt, BaMenuItem as ɵs, BaMsgCenter as ɵu, BaMultiCheckbox as ɵv, BaPage as ɵbc, BaPageTop as ɵw, BaPane as ɵbb, BaPictureUploader as ɵx, BaSaveButtonComponent as ɵbe, BaSearchButtonComponent as ɵbh, BaSidebar as ɵy, BaSubmitButtonComponent as ɵbf, BaToolBarButtonComponent as ɵbi, BaToolBarDropdownButtonComponent as ɵbj } from './lib/theme/components';
export { BaCardBlur as ɵj } from './lib/theme/components/baCard/baCardBlur.directive';
export { BaCardBlurHelper as ɵk } from './lib/theme/components/baCard/baCardBlurHelper.service';
export { BaScrollPosition as ɵg, BaSlimScroll as ɵh, BaThemeRun as ɵi } from './lib/theme/directives';
export { GlobalState as ɵbq } from './lib/theme/global.state';
export { BaAppPicturePipe as ɵa, BaKameleonPicturePipe as ɵb, BaProfilePicturePipe as ɵc, FilterPipe as ɵd, MLPCurrencyPipe as ɵf, UTCDatePipe as ɵe } from './lib/theme/pipes';
export { SaveClosePopupComponent as ɵbl } from './lib/theme/popups';
export { BaImageLoaderService as ɵbt, BaMenuService as ɵbw, BaThemePreloader as ɵbu, BaThemeSpinner as ɵbv } from './lib/theme/services';
export { BaThemeConfig as ɵbp } from './lib/theme/theme.config';
export { BaThemeConfigProvider as ɵbo } from './lib/theme/theme.configProvider';
export { EmailValidator as ɵbr, EqualPasswordsValidator as ɵbs } from './lib/theme/validators';

我错过了什么?有什么提示吗?谢谢你的帮助!

答案#1

你需要导出所有应对外部可访问的内容。这必须在 ./public_api.ts 中完成,文件内容应类似如下:

export * from './lib/theme/services';

否则,服务将仅在你可以在 my-lib.d.ts 中看到的令牌下可用