Бандлы для сборки имеют одинаковое содержание независимо от платформы:
project/
├── …
├── bundles/
│ ├── desktop.bundles/
│ │ ├── about/
│ │ │ └── about.bemdecl.js
│ │ └── …
│ └── touch.bundles/
│ ├── about/
│ │ └── about.bemdecl.js
│ └── …
└── …
Т. е. /bundles/desktop.bundles/about/about.bemdecl.js === /bundles/touch.bundles/about/about.bemdecl.js
. Каждый раз при добавлении нового бандла его приходится дублировать во все уровни сборки, что кажется избыточным. Хотелось бы сократить структуру до:
project/
├── …
├── bundles/
│ ├── about/
│ │ └── about.bemdecl.js
│ ├── contacts/
│ │ └── contacts.bemdecl.js
│ └── …
└── …
И в процессе сборки уже получать:
project/
├── …
├── bundles/
│ ├── about
│ │ ├── about.bemdecl.js
│ │ ├── about.desktop.bemhtml.js
│ │ ├── about.phone.bemhtml.js
│ │ ├── about.touch.bemhtml.js
│ │ ├── about.desktop.bemtree.js
│ │ ├── about.phone.bemtree.js
│ │ └── about.touch.bemtree.js
│ └── …
└── …
Думал в сторону enb/techs/symlink
, но он тоже возвращает Error: Concurrent techs for target: about.desktop.bemdecl.js, techs: "symlink" vs "symlink"
; А нужно, видимо, что-то похожее на механизм {lang}
, только {platform}
.
Если они одинаковые, зачем их разделять, что мешает иметь один общий бандл собираемый из разных уровней?
@Realetive простого способа, похоже, нет :( я бы предложил использовать
bem-tools-create
для создания бандлов сразу на всех уровнях — это самое быстрое и гибкое решение (если в какой-то момент состав деклов все-таки поменяется в зависимости от уровня).@Realetive вопрос интересен, но не понятна проблема, какую задачу надо решить? Что меняет раскладывание файлов с одинаковым содержанием рядом?
Кажется понял, надо по одной декларации собирать цели (enb:target) для разных платформ в одном узле (enb:node), так? Есть ощущение, что это уже где-то обсуждалось...
@tadatuta А если так https://github.com/ilyar/sandbox/blob/master/bem/build/src/project-build-by-platform/.bem/enb-make.js? Демо https://github.com/ilyar/sandbox/tree/master/bem/build#build-by-platform
@ilyar Что-то похожее и пытался делать, но у меня ругалось на
Concurrent techs for target
. Возможно, что-то не так делал. Спасибо, сейчас попробую по аналогии…Возникает, если добавлять в ноду уже добавленную технологию такими же параметрами , поэтому provide ?.bemjson.js (https://github.com/ilyar/sandbox/blob/master/bem/build/src/project-build-by-platform/.bem/enb-make.js#L26-L28) добавлено раньше остальных, если пометить ее в цикл работать не будет.
Вернее получится, что мы задекларируем одну и туже цель (enb:target) разными технологиями.
@ilyar годно!
@ilyar, спасибо! Наконец-то вернулся к вопросу. Итоговый конфиг (для истории):
Извините, прошлый пример не учитывал несколько платформ. Исправил:
@Realetive Если не сложно, сделай ПР https://github.com/ilyar/sandbox/tree/master/bem/build будет полезно иметь щупательные примеры в одном месте.
@ilyar делаю в https://github.com/Nevatrip/frontend. Там модифицированный
bem-express
, i18n, universal-router — кра-со-та! 😃@Realetive расскажи про красоту, если я правильно понял сайт на php, а фронтенд bem-express, расскажи подробнее тут https://github.com/bem-site/bem-forum-content-ru/issues/1427