Проект на базе project-stub. Используются:
- bem-core v 3.0.1
- bem-components v 3.0.1
- enb
Около 100 страниц накопилось. Сборка идет около 30..70 с (30 000..70 000 мс) Можно ли что-то подкрутить для увеличения скорости?
Проект на базе project-stub. Используются:
Около 100 страниц накопилось. Сборка идет около 30..70 с (30 000..70 000 мс) Можно ли что-то подкрутить для увеличения скорости?
Если действительно необходимо собирать одновременно 100 принципиально разных бандлов, то сильно вряд ли удастся сэкономить.
Возможно, между страницами есть много общего и количество бандлов можно сильно сократить, собирая только принципиально отличающиеся части? Или, наоборот, если страницы не пересекаются, то можно собирать точечно только то, что сейчас поменялось, а остальное не трогать.
В общем, чтобы мочь что-то подсказать, нужны подробности, а в идеале — посмотреть на код.
@tadatuta Прошу прощения за долгий ответ.
Полный проект гораздо больше, но саму структуру, чтобы знать о чем говорим можно взять из моего предыдущего вопроса - репозиторий
Сейчас 111 страниц, в результате сборки в директорию merged собираются стили и скрипты всех страниц. Когда работаешь над одной страницей (css, js) и обновляешь страницу для применения написанного идет долгая сборка всего и вся.
Было бы вполне правильно разделять как-то сборку (например, по умолчанию собирать лишь одну страницу, с которой сейчас работаю, а всю стопку отдельной командой).
Нахожусь в некой растерянности, куда и как двигаться.
Если структура осталась прежней, то да, достаточно всего лишь в dev-режиме подключать стили и скрипты текущего бандла вместо
merged
(а для production возвращатьmerged
, если это осмысленно). Пересборка ускорится в те самые 111 раз :)Да, осмысленно) На проде нужны смерженные файлы, но при разработке уж очень долго пересборка merged-bundle идёт. Т.е. получается
меняю конфиг на такой: ```js var fs = require('fs'), path = require('path'), techs = {
}, enbBemTechs = require('enb-bem-techs'), merged = require('./techs/merged'), levels = [
];
module.exports = function(config) { var isProd = process.env.YENV === 'production', mergedBundleName = 'merged', pathToMargedBundle = path.join('desktop.bundles', mergedBundleName);
// тут условие-1 if( isProd ){ merged(config, pathToMargedBundle); }
// тут условие-2 if( isProd ){ nodeConfig.addTargets(isMergedNode ? ['?.css', '?.js'] : ['?.html']); } else { if( !isMergedNode ){ nodeConfig.addTargets(['?.css', '?.js', '?.html']); } }
}; ```
Правильно ли описан процесс? По идее не должно же быть ситуации, когда в дев-режиме не будут собираться какие-то необходимые данной странице (бандлу) js, css ?
Чтобы все быстро работало в режиме
enb server
достаточно только пункта 3 — если в BEMJSON в dev-режиме не будут запрашиваться merged-файлы, то они и пересобираться не будут.Такая ситуация может возникнуть только в случае, если полениться писать правильные deps-файлы. Например, зная, что на странице
page1
есть зависимость от блокаblock1
и не добавить явно эту зависимость наpage2
, ожидая, что за счетmerged
-сборки она все равно окажется в итоговом бандле. Но это изначально неправильный подход.Да, если не будут запрашиваться, то и пересобираться не должны. Но в конфиге, чтобы ускорить сборку merged-бандла результирующие ?.css, ?.js отдельных страниц не собираются
Потому и дошёл до условий и переменных окружения. Похоже, загнался уже)