есть блок 'someBlock' в нём элемент 'elem1' в нём блок 'image', картинка image.svg
{
block : 'someBlock'
{
elem: 'elem1',
content:
{
block: 'image',
attrs:{src: 'image.svg'}
}
}
}
получается такая вот файловая структура desktop.bundles |-index | |-... |desktop.blocks | |-image | |-someBlock | | |-__elem1
вопрос: куда положить файлик image.svg чтобы всё было по уму? если положить в папку с бандлом то безусловно работает, но что-то мне подсказывает что надо делать как то по другому, логично что картинка должна лежать где-то в /desktop.blocks/someBlock/__elem1, тогда не понятно как обратиться к этой картинке в attrs:{src: 'image.svg'} чтобы она нашлась?
Если картинка - часть оформления, то проще добавить в папку блока через стили. Если картинка - часть контента, можно просто прописать полный путь к ней. Уже не суть важно где она лежит. У меня это папка
mediaв корне проекта. Если это на CMS какой то будет, то будет из БД просто url вставляться.картинка есть часть оформления, и в том и был вопрос, если делать как часть оформления и на уровне переопределения блока image её положить, то как это будет выглядеть в коде? куда надо ссылаться в attrs:{src: 'image.svg'} ???
@sosnovskyas Для правильного рерайта урлов следует использовать borschik.
Схема примерно такая:
.borschik(имя начинается с точки). Например, такой:заинлайнит все картинки прямо в CSS.
enb make clean, чтобы сбросить кэш.@sosnovskyas если картинка часть оформления, её не надо вставлять как image, а прописывать в css как background.
И использовать borschik для фриза статики в css.
а где почитать про предобработку bemjson.js не дадите ссылочку? а то что то google не подсказывает (
@sosnovskyas обработка
bemjson.jsничем не отличается от обработки любого другого JS-файла.Расскажу чуть подробнее, чтобы объяснить идею.
borschik— это тул, который умеет запускать так называемые «технологии» — собственные модули, работающие каждый со своим форматом файлов (например,*.cssили*.js). Технологии умеют всего 2 вещи:include(заменить путь до файла на его содержимое) иlink(правильно преобразовать путь).В данном случае нужен
linkдля технологииcss. Документация на него тут, но все сводится к тому, что вызовborschik.link('path/to/file')будет зафрижен в соответствии с конфигом.Конкретно для фриза
bemjson.jsна примереproject-stubи сборки наENBпотребуется вот такой дифф в make.js:Тут мы добавляем дополнительный шаг, на котором
borschikиз?.bemjson.jsс вызовамиborschik.link()сделает_?.bemjson.js, где они уже превращены в правильные урлы в соответствии с конфигом и используем его для генерации HTML.Далее необходим собственно сам конфиг Борщика в корне проекта.
Ну и тогда в
bemjson.jsможно делать так:я тут не до конца понял предназначение, ведь enb это и есть сборщик, зачем сборщик для сборщика? или эта иерархия необходима? или end не научить пути фризить в файлах технологий?
enb управляет сборкой. Например, как gulp сам по себе ничего не делает, также и enb
А без
enbникак не обойтись? Нет ли примера конфига дляbem makeчтобы вbemjson.jsможно было делать так:а как ты обойдёшся? тебе в любом случае тогда альтернативный сборщик нужен будет. поменяешь шило на мыло
т.е. сам по себе
bem-tools(командаbem make), безenb, не может использовать borschik в bemjson, да?@seroy
bem-toolsвполне может заменитьENBв данном случае, но в новой версииbem-tools@0.10.0мы поддержали оба типа конфигов: старые и дляENB, так что если нет каких-то веских причин продолжать использовать старый конфиг дляbem make, мы рекомендуем мигрировать на ENB-конфиги. Для этого достаточно просто заменить.bem/make.jsна.enb/make.js.Если же такой переход по какой-то причине невозможен, помогу с написанием конфига для
bem make.@tadatuta А есть ли аналогичное bemjson.js решение для bh.js файлов? Другими словами, хочется чтобы и внутри шаблонов можно было использовать конструкцию borschik.link('my-image.svg').
Например, имеется файл с содержимым:
};
Как правильно изменить url: '/common.blocks/grid/__cell/images/' + data + '.png', и какие дополнителные настройки внести в файл .enb/make.js? Хочется чтобы ссылка переписывалась и замораживалась борщиком по аналогии с ссылками в css и js файлах.
Присоеденяюсь к вопросу Несовсем понятно где хранить саму картинку и путь до нее в css
Такая структура файлов
CSS
в файле
.borschikследующий кодВсе верно? Борщик подключается, но ссылку не меняет на base64 кодировку
Возможно ли так же как-то парсить все папки блоков и элементов, искать в них файлы картинок, и копировать в корневую папку проекта
imagesВсем привет!
Чтобы в ENB обработать
urlк картинке совсем не обязательно использоватьborschik.Объясню на примере. Есть блок
logo. Картинкаlogo.png— это часть его реализации, поэтому её удобно разместить в исходных файлах блока, рядом с CSS-файлом.В CSS-файле пишем относительный путь (относительного самого CSS-файла):
Ожидаем получить HTML-файла в
indexбандле. В BEMJSON просто указываем блокlogo:Для сборки воспользуемся пакетом
enb-stylus. Пример.enb/make.jsфайла:В результате получим файл
desktop.bundles/index/index.css:У такого решения может быть проблема постави: нельзя скопировать папку
desktop.bundles/index, т.к. CSS-файл требует наличия файла изdesktop.blocks.Чтобы такой проблемы не было можно «заинлайнить» картинку: записать её в код CSS-файла в формате
base64. Для этого следует воспользовать опцией url со значениемinline.В результете получим CSS, который не требует наличия исходных файлов:
Спасибо большое за подробный ответ!
@blond, подключили, все работает, кроме
Стайлус подключен, работает, обрабатывает styl, создает css, сжимает его, но директива
url: 'inline'не инлайнит картинки В какую сторону рыть?@PAND-or какая версия пакета
enb-stylus? Нужнаv2.0.0.Какой размер у картинок? По умолчанию нужно меньше 14kb.
Что будет если сбросить кэш
-rm -rf .enb/tmpили пересобрать без учёта кэшаenb make --no-cache?@blond Спасибо! Скачали
project-stubи в нем версия была меньше второй Обновилиenb-stylusвсе работает!