Я поддерживаю библиотеку Angular, которая генерируется Angular Cli. Внутри рабочей области есть библиотека и демонстрационное приложение, которое является стандартной архитектурой для всего Angular libray, созданного из angular -cli.
В настоящее время я обновляю свою библиотеку до нового выпуска Angular 9.
Я использую автоматическое c обновление соула с ng update
. После исправления некоторых проблем с миграцией (некоторые API устарели). Библиотека может быть успешно построена.
Но я заблокирован сборкой демо-приложения с библиотекой зависимостей. Я получил ngcc
ошибку. После некоторых онлайн-исследований я знаю фон: https://angular.io/guide/ivy#maintaining -library-compatibility ; Сборка библиотеки завершается неудачно с Angular 9
Несмотря на то, что я понимаю, что такое ngcc
и зачем нам это нужно сейчас, я все еще не могу исправить ошибку сборки.
В моей библиотеке тоже есть следующие модули:
// the first module
@NgModule({
...
})
export class FirstModule {
public static forRoot(
FirstConfig: Config
): ModuleWithProviders<FirstModule> {
return DIYModuleWithProviders(FirstModule, FirstConfig);
}
...
}
// the second module
@NgModule({
...
})
export class SecondModule {
public static forRoot(
SecondConfig: Config
): ModuleWithProviders<SecondModule> {
return DIYModuleWithProviders(SecondModule, SecondConfig);
}
...
}
Оба эти модуля вызывают функцию, импортированную из другого модуля в методе fotRoot
, следующим образом:
export function DIYModuleWithProviders(
module: any,
config: Config
): ModuleWithProviders {
return {
ngModule: module,
providers: [
{
...
},
{
...
}
]
};
}
Эта функция просто возвращает ModuleWithProviders
для метода forRoot
. Здесь я абстрагирую функцию, потому что эти два модуля имеют одинаковые логики c для этой части
Как я уже говорил, библиотека сама собирается успешно (на основе документов команды google Angular, библиотека все еще использует старый View Eigine вместо компилятора Ivy). Но демо-приложение не удалось собрать со следующей ошибкой:
Compiling my-library : module as esm5
Error: Error on worker #1: Error: No typings declaration can be found for the referenced NgModule class in function DIYModuleWithProviders(module, config) {
return {
ngModule: module,
providers: [
{
...
},
{
...
}
]
};
}.
на основе документа команды Google Angular: в демо-приложении используется компилятор Ivy, поэтому ngcc
приходит сюда ,
Я некоторое время настраивал тип DIYModuleWithProviders
, но не могу разобраться. На основании ссылки https://angular.io/guide/migration-module-with-providers в Angualr 9 ModuleWithProviders
должен иметь тип generi c. Поэтому измените его на ModuleWithProviders<any>
, но оно не работает.
https://github.com/500tech/angular-tree-component/issues/721. Есть какие-нибудь идеи?