Упакованная библиотека ng-packagr: работают только минифицированные имена компонентов

Я сделал библиотеку angular (7.2) в комплекте с ng-packagr, опубликованную на npm. Теперь я хочу использовать его в другом проекте. Я могу импортировать модуль, но не содержащие его компоненты:

Модуль в моем библиотечном проекте, который я связываю, выглядит так:

import { ConfirmDialogComponent } from './dialogs/confirm/confirm-dialog.component';

@NgModule({
  imports: [...],
  entryComponents: [
    ConfirmDialogComponent
  ],
  declarations: [
    ConfirmDialogComponent
  ],
  exports: [
    ConfirmDialogComponent
  ]
})
export class MyComponents { }

В целевом проекте я устанавливаю опубликованный пакет с помощью npm и импортирую модуль в `app.modules.ts.

импортировать {BrowserModule} из '@angular/platform-browser'; импортировать {NgModule} из '@angular/core';

import { AppComponent } from './app.component';
import { MyComponents } from 'my-components';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    MyComponents
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

Пока нет ошибок, но когда я использую его в app.component.ts

import { Component } from '@angular/core';
import { ConfirmDialogComponent } from 'my-components';

оператор приводит к ошибке компиляции

ERROR in src/app/app.component.ts(2,10): error TS2305: Module '"../../node_modules/my-components/my-components"' has no exported member 'MessageDialogComponent'.

Если я посмотрю на node_modules/my-components/my-components.d.ts

/**
 * Generated bundle index. Do not edit.
 */
export * from './my-components.module';
export { ConfirmDialogComponent as ɵa } from './dialogs/confirm/confirm-dialog.component';

и это app.component.ts к

import { Component } from '@angular/core';
import { ɵa } from 'my-components';

оно работает!

Так почему же минимизированный (?) псевдоним работает, а не настоящее имя компонента?

--

редактировать: если я удалю как ɵa из файла объявления, я могу использовать настоящее имя компонента, как и ожидалось. Что здесь не так?


person Paflow    schedule 21.08.2019    source источник


Ответы (1)


Решение состояло в том, чтобы использовать файл ствола в качестве файла входа для ng-packagr public_api.ts вместо (углового) файла модуля.

export * from './my-components.module'; // don't forget to export the module itself
export * from './dialogs/confirm/confirm-dialog.component';
person Paflow    schedule 21.08.2019