AoT + Webpack + динамическое требование json

После установки подключаемого модуля AoT (https://www.npmjs.com/package/@ngtools/webpack) для webpack, dynamic requires больше не работает:

// Example that used to work
public getJson<T>(fileName: String): T {
    return require(`../../${fileName}_${this.lang}.json`);
}

Со стандартными ts-loader или awesome-typescript-loader и т. д. dynamic requires работало, а webpack объединял файлы json в основной пакет app. Однако с плагином AoT/Webpack файлы json вообще не связаны. Я даже не думаю, что aot loader больше перебирает файлы json.

Любые идеи, как заставить это работать снова? Спасибо.

Информация:

https://github.com/angular/angular-cli/issues/3306

https://github.com/angular/angular-cli/pull/4153

Обновление:

Несколько работает с SystemJS -> System.import(), но неустойчиво angular-cli/issues/6629#issuecomment-336411537


person Stevanicus    schedule 12.10.2017    source источник


Ответы (1)


Обходной путь состоит в том, чтобы использовать System.import() для сборки загрузки и объединения динамических файлов, а затем использовать стандартный механизм веб-пакета для загрузки фактических файлов:

    public getLazyFiles<T>(somePath: string): T {
        /* AoT Hack - causes the AoT to find and prepare the dynamically loaded files */
        System.import(`../../${somePath}_${this.someSuffix}.json`);
        /* ------- */
        // This is then used by webpack to actually load the files
        return require(`../../${somePath}_${this.someSuffix}.json`);
    }

Зачем нужен этот обходной путь, объясняется здесь: https://github.com/angular/angular-cli/issues/6629#issuecomment-336478854

person Stevanicus    schedule 07.11.2017