По-умолчанию bem server ожидает следующую структуру для собранных файлов страниц:[project-root]/pages-desk
Одним из вариантов обеспечения ЧПУ может служить такой конфиг для nginx:
server {
listen 80;
server_name ~^localhost$;
location / {
proxy_pass http://localhost:8080;
}
# /favicon.ico
rewrite ^/favicon.ico$ /pages-desktop/favicon.ico last;
# / => /pages-desktop/index
rewrite ^/(\?.*)?$ /pages-desktop/index/index.html$1 last;
rewrite ^/_(?:\w+)\.(js|css|\w+\.css)(\?.*)?$ /pages-desktop/index/_index.$1$2 last;
# /page => /pages-desktop/page/page.html
rewrite ^/(\w+)/(\?.*)?$ /pages-desktop/$1/$1.html$2 last;
# css, js
rewrite ^/(\w+)/_(?:\w+)\.(js|css|\w+\.css)(\?.*)?$ /pages-desktop/$1/_$1.$2$3 last;
# add final slash to url
rewrite ^/([^?/.]+)(\?.*)?$ /$1/$2 permanent;
rewrite ^/([^?]+/[^?/.]+)(\?.*)?$ /$1/$2 permanent;
}
Спасибо за совет! Но вам не кажется, что по умолчанию технология должна ожидать наиболее логичной и, как ни странно, наиболее ожидаемой структуры (в приведённом вами примере, структура "Стало", на мой взгляд, таковой и является). Деление на десктопный/мобильный/планшетный/и т.д. довольно условно и может быть удобно в частных случиях, но никак не в общем.
Получается, даже, некое навязывание конкретной реализации, что несхоже с традициями БЭМ-идеологии (например, при разработке с побощью БЭМ каждый может решать сам использовать ли префиксы типа "b-", "i-" или нет).
Интересно услышать мнение разработчиков БЭМ по этому поводу.
«Стало» — это результат действия приведенного в посте конфига. Разумеется, его можно невозбранно, как сказал бы Мицгол, менять под нужны вашего конкретного проекта и он является лишь примером.
Что касается pages-desktop, то по-умолчанию bem make ожидает pages* (pages, pages-desktop, pages-mobile, pages-touch и т.п.) в качестве уровня бандлов и это поведение можно полностью настраивать в .bem/make.js через
MAKE.decl('Arch', {
bundlesLevelsRegexp: /регулярное выражение/,
});
В Яндексе принято деление на платфомормы и этот подход в т.ч. применяется для библиотек блоков (например, bem-bl/blocks-desktop), но, как вы верно заметили, это все остается на откуп разработчикам и, как методология, так и инструменты не навязывают этого разделения.
Теперь всё стало понятно. И ожидание именно pages*, а не как показалось ранее только pages-desktop выглядит вполне логичным.
Спасибо вам, ребята, за клёвые и логичные тулзы
Такие узлы будут триггерить сборку, но в браузер отдавать будет нечего.
Как вариант, можно написать такой библиотечный класс, типа AliasNode, который будет параметризоваться целью-зависимостью и опционально именем файла (для случаев, когда нода-зависимость собирает несколько файлов), который нужно отдать по завершению сборки.
https://github.com/bem/bem-tools/issues/218
Было бы еще хорошо, если бы этот роутинг (было - стало) каким-то образом можно было сопоставить с (или сгенерировать на его базе) правилами для nginx, описанными в посте.
Правда, практической пользы, ведь, не сильно много