Войти с помощью github
Форум /

Здравсвтуйте. Решил использовать bem совместно с webpack. Но возникла следующая проблема, может подскажете, как решить?: у каждого блока может быть много css тем, то есть имею вот такую структуру:

components/
    menu/
        menu.js
        themes/
            default/
                menu.scss
            dark/
                menu.scss
            light/
                menu.scss

css тема должна подгружаться динамически, то есть что-то вроде: содержимое menu.js файла:

require('./themes/' + currentTheme + '/menu.scss');

Но при таком подходе в webpack-е в бандл будут собраны все файлы всех css тем. Можно, конечно, использовать

require.ensure([], function() {
    require('./themes/' + currentTheme + '/menu.scss');
});

и тогда scss файл каждой темы будет помещен в отдельный бандл и будет подгружаться динамически. Но и в этом случае возникает проблема. Т.к. require.ensure выполняется асинхронно, то модуль menu.js отработает и разрезолвится и параллельно пойдет запрос за стилями блока, но сам блок и его верстка уже будут в DOM-е и пользователь увидит "голый" html, затем подгрузятся стили блока и верстка блока будет стилизована. Как это обойти? То есть как сделать, чтобы модуль menu.js не разрезолвился до тех пор, пока не резовленятся его зависимость, а именно css файл темы? Спасибо.