Angular 7 ngBuild: требование (имя файла) не может быть передано в методе forRoot () - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь передать имя актива в кеш-памяти как параметр компонента модуля, который у меня есть:

  • .. / assets / svg / генерируется / sprint.svg //файл существует
  • , затем я хочу require('../assets/svg/generated/sprint.svg'), чтобы создать файл с кэшем 'sprite-345234dfg54gh6422111111.svg'
  • и использовать это имя в моих компонентах

AppModule:

const SPRITE_SRC = {
    raw: '../assets/generated/svg/sprite.svg',
    required: require('../assets/generated/svg/sprite.svg')
};

console.log(SPRITE_SRC)
// output OK : {
//    raw : '../assets/generated/svg/sprite.svg',
//    required: 'sprite-345234dfg54gh6422111111.svg'
// }

@NgModule({
    entryComponents: [...],
    declarations: [...],
    imports: [
        SvgSpriteModule.forRoot(SPRITE_SRC),
    ]
})
export class AppModule {}

SvgSpriteModule (здесь все нормально):

export interface SvgSpriteConfig {
    raw: string;
    required: string;
}

export const PaCommonSvgSpriteConfig = new InjectionToken<SvgSpriteConfig>('SvgSpriteConfig');

export class SvgSpriteModule {
    static forRoot(config?: SvgSpriteConfig): ModuleWithProviders {
        return {
            ngModule: SvgSpriteModule,
            providers: [{ provide: PaCommonSvgSpriteConfig, useValue: config }]
        };
    }
}

Но когда я пытаюсь загрузить этот конфиг в компонент этого SvgSpriteModule, свойство required исчезает ...:

export class SvgSpriteComponent {
    constructor(@Inject(PaCommonSvgSpriteConfig) private config: SvgSpriteConfig) {
        console.log('SvgSpriteComponent', config);
        // output KO : {
        //    raw : '../assets/generated/svg/sprite.svg'
        // }
    }
}

Я пытался все, что мог в течение 3 часов, не понимая ... требуется функция кажется синхронным, но, возможно, это асинхронный?Как я могу это исправить?

Спасибо

1 Ответ

0 голосов
/ 23 января 2019

В конце концов это было невозможно ...

Я закончил тем, что создал спрайт с напрямую переименованным файлом. Затем, сразу после этого, у меня есть сценарий оболочки, который найдет имя файла вновь созданного спрайта (идентификатор которого динамический из-за хэша) ... и затем я создаю файл машинописного текста, содержащий только это ... как:

export const SvgSpritePath = 'assets/svg/sprite-4c6d366c.svg';

Таким образом, этот файл может быть легко импортирован без проблем и передан как параметр в методе forRoot () (чтобы инициировать пользовательский компонент внутри моей внутренней угловой библиотеки lib)

...