есть блок '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
все работает!