Ситуация такая: использую borschik-js-include для подтянивания файлов из node_modules. Бандлы собираются - тесты (specs) не собираются. Пробовал решить ситуацию кардинально и заиспользовал browserify но столкнулся с той же самой проблемой.
Ситуация такая: использую borschik-js-include для подтянивания файлов из node_modules. Бандлы собираются - тесты (specs) не собираются. Пробовал решить ситуацию кардинально и заиспользовал browserify но столкнулся с той же самой проблемой.
Добрый вечер
Использую project stub
Ранее всю разметку писал в index.bemjson.js, сейчас же решил оставить там основную разметку, а контент и шаблонизацию вынести для каждого блока в bemhtml/bemtree в common.blocks
И, вроде бы, всё почти сложилось, сами сущности расширяются, в итоговом html в браузере я вижу все блоки, которые должны были сформироваться. Но вот стили применились только к элементам, описанным в bemjson. А блоки, описанные через bemtree оказались проигнорированы в контексте css
Я вычистил из проекта лишнее и залил сюда - https://yadi.sk/d/NeU8Hc033MSDX2
Помогите плиз разобраться в чём дело, почему не применяются стили к topmenu__wrapper?
Подскажите, как собрать проект в отдельную папку public
, в которой должны быть все html-страниц, в public/css
все .css
файлы бандлов и public/js
аналогично. С этим собственно разобрался. Теперь хотелось бы чтобы в html все пути правильно поменялись на public
.
Попытался с .borschik
, но получить нужный путь так и не смог...
Например, есть бандл каталог, при сборке должны быть файлы public/catalog.html
, public/js/catalog.min.js
, public/css/catalog.min.css
и они должны подключиться.
Использую и работаю в исходниках project-stub. Есть блок с названием advantages. У него есть элемент 'icon' с модификатором 'type'. В папке _type лежат иконки(svg) и css файлы с путями до иконок. Пример:
/* advantages__icon_type_innovation.css */
.advantages__icon_type_innovation {
background-image: url(innovation.svg);
}
При сборке проекта и обновлении страницы, пути верные и нет ошибок. Но в иконках указан путь в формате: background-image: url(data:image/svg+xml;charset=US-ASCII......) И иконки не отображаются. Возможно ли, что не правильный способ кодирования svg и как бороться с этим? Стоит отметить, что с png всё работает.
Разместил конфиг борщика в корне, чтобы кодировать все изображения, кроме SVG в base64.
Если **/*.blocks/**
, то кодирует все изображения.
Но мне нужно, чтобы кодировалось все, кроме svg. Условие **/*.blocks/**/!(*.svg)
не работает :(
Что я не так делаю?
Конфиг:
{
"freeze_paths": {
"img/**": "img",
"**/*.blocks/**/fonts/**" : "fonts",
"**/*.blocks/**": ":encodeURIComponent:",
"**/*.blocks/**/!(*.svg)": ":base64:"
}
}
День добрый!
В конфиге есть вот такая строчка
[techs.borschik, { sourceTarget: '?.css', destTarget: '_?.css', tech: 'cleancss', minify: false }],
Интересуют поля tech: 'cleancss' и minify: false/true
Логично предположить, что для минификации используется cleancss. Но как он подтягивается? Можно ли его тонко настроить? Хотелось бы научиться отключать некоторые опции минификации (как, например, опция mergeLonghand в cssnano)
Версия bem-core 3.0.1. Полный стек.
Вот есть тестовый репозиторий, на примере которого пытаюсь разобраться с борьщиком. В чем там ошибка, почему он не собирает изображения по указанному пути?
Не могу разобраться, как использовать нотацию borschik:include:
в js-файлах.
Есть пример. Файл a.js
:
/* borschik:include:b.js */
Файл b.js
:
// test b
Если исопльзую просто borschik с командной строки, то всё работает:
borschik --input=a.js --minimize=no
-- всё работает ок. В составе enb сборки инструкция не обрабатывается.
Пытался подключать js-borschik-include
в .enb/make.js
для обработки отдельных исходных файлов, но либо не разобрался с особенностями конфигурации (обычная история), либо какие-то ещё дрова попались.
Включаю технологию:
var
// ...
techs = {
// ...
borschikInclude: require('enb-borschik/techs/js-borschik-include'),
browserJs: require('enb-js/techs/browser-js'),
// ...
},
// ...
;
module.exports = function (config) {
// ...
config.nodes('pages/*', function(node) {
node.addTechs([
// ...
[techs.borschikInclude, {
sourceSuffixes : ['js'],
target: '?.pre.js',
}],
[techs.browserJs, {
sourceSuffixes: ['vanilla.js', 'js', 'browser.js'],
sourcemap: true,
includeYM: true,
}],
// ...
]);
});
Что делаю не так?
Если правильно понимаю, мне надо заставить borschikInclude
обрабатывать каждый js-файл (или файлы с определённым расширением) перед передачей в browserJs
? Как?
Смотрел на:
Появилась необходимость собирать не только основной файл js но и подключать к нему web worker. Как Реализовать такой функционал в пределах БЭМ проекта?
Проблема довольно банальна - ссылка на картинку блока из CSS файла блока не работает. Единственный работающий вариант это:
...
background-image: url(../../common.blocks/header/images/bg-header.png)
...
Фактически это абсолютный путь к блоку, в который так-же входит и путь к папке блоков common.blocks
, что на мой взгляд совершенно неверно. Т.е. если я допустим захочу вынести потом этот компонент в допустим папку blog.blocks
то получается надо будет бегать и пути менять. Или переименую я блок - та-же история.
Вот такой вариант:
...
background-image: url(images/bg-header.png)
...
работать отказывается
Borschik (через enb - project-stub) чё-то как-то не помог - такой путь он просто проигнорировал. Пытался крутить конфиг .borschik
но без особого успеха (но тут я сильно глубоко не рыл).
Итого вопрос - как всё-таки идеологически верно указывать пути к картинкам блока в CSS-файлах блока?
Нужно получать на выходе файл с шаблонами бандла без обёрточного кода BEM-XJST (BEM-XJST User-code Start ... BEM-XJST User-code End
).
Пока придумал добавить свою технологию, которая из имеющегося .bemhtml.js создавала к.-ндь .bemhtml.raw.js, выкусывая всё, кроме шаблонов.
Есть ли более изящный способ?
В опциях к самому techs/bemhtml ничего годного не вижу.
Возникла задача перенести часть компонент из "генерящихся на лету" в статику (в частности, чтобы наладить совместную разработку с коллегами, не использующими систему сброки).
Напр., в соответствии с описанным в посте про dist-поставки, отдельно подключать для bem-components components.dev.js+bemhtml.js
и components.dev.css
или минимизированные аналоги.
Насколько понимаю, просто отключать уровни в make.js
не годится, надо как-то более поэлегантней подходить?
Использую enb
и локальный сервер для разработки. При помощи enb make
из gulp
генерятся "боевые" шаблоны для Phalcon/php сервера.
Добрый день! Внимательно прочитал всю доступную документацию в старом виде и в новом, несколько статей, посмотрел несколько вебинаров и лекций. Но некоторые моменты всё равно ускользнули от моего внимания и понимания. В целом эта непонятная ситуация причиняет мне физический дискомфорт. Боюсь, что для понимания многих вещей, придется просмотреть много кода, что бы найти примеры использования, а это камень в огород документации. Без ответа на эти вопросы, я буду плавать в методологии и не смогу ей воспользоваться.
Из документации я не понял:
1. Шаблонизация в браузере когда и зачем нужна? Я предполагаю, что весь HTML будет собираться на сервере, в том числе, что динамично будет отправляться клиенту. Но, коль есть возможность компилировать в браузере, хотелось бы узнать о плюсах и кейсах, когда это может понадобиться. Что, касательно ресурсов, насколько это ресурсозатратно?
2. Возможность частичной сборки и компиляции со статичными html файлами Многие элементы интерфейса - статичные, например, шапка, меню, футер, общие лейауты. Собирать их отдельно для каждого клиента - бессмысленно. Возможно ли как-то объединять уже собранный, статичный HTML и динамичные блоки?
3. Документация про сборку Я прочитал весь раздел про enb, но там скорее кейсы, чем сама архитектура. Мне непонятно, как организовать сборку для проекта в целом.
4. Как организовать сборку для дева, прода, лайв В продолжение предыдущего вопроса - для разработки и для прода требуются разные настройки. Я правильно понимаю, что разные настройки обеспечиваются разными файлами по типу make.js ?
5. Документация про декларацию Я не нашел цельной информации про декларацию (?.bemdecl.js), и всё, что я про это знаю - частички из статей про enb, из-за этого складывается ощущение, что я чего-то не догоняю.
_6. Почему и зачем есть BEMHTML и bh, какой для каких ситуаций лучше _ Я долго пытался понять - что делает bh, пока не понял, что это - еще один шаблонизатор, такой же, как BEMHTML. Так в чём же разница, и как так получилось, что есть два шаблонизатора? Какой из них под какие цели заточен? И, кстати, про bh нет документации.
_7. Где доки про BEMTREE, когда что лучше использовать _ Про BEMTREE лишь сказано, что синтаксис "Такой же, как в BEMHTML, но только с двумя режимами", при всём при том, что это - важный и основной инструмент при сборке. Очень хотелось бы увидеть примеры и объяснения, как делать шаблоны для BEMTREE.
8. Доки про SASS|LESS| любые модули Основной инструмент библиотеки для css - stylus, по историческим причинам. Хотелось бы узнать, как можно использовать другие препроцессоры. Я часто встречал мнение, что БЭМ - навязывает свой стек. Я понимаю, что это не так, просто инструменты дефолтные такие. Хотелось бы узнать, как можно в сборку включать те, что соответствуют моему стеку.
9. Контроллеры для сборки, практики BEM - штука хорошая, но кажется очень замкнутой в себе из-за того, что до конца не ясен сам процесс сборки и связь с внешним миром. Во всех статьях и гайдах говорится в-основном о статичных сайтах. И из-за этого, совсем мне не понятно, как сделать динамичный сайт, как организовать динамичную и частичную сборку, роутинг и т. д.
10. Шапка, лейаут в общем html Возможно, мой мозг еще не переключился в БЭМ-область, но мне до конца не ясно, как сделать общие части интерфейса для всех страниц сайта - каждый раз подключать header, content, footer?
11. Подключение скриптов, стилей, других библиотек. Если подключение своих скриптов, всё худо-бедно понять можно, то как подключить скрипты библиотек? Их ведь нужно указать в head (а некоторые скрипты в футере). Как же это всё делается в рамках шаблонов, страниц? Хардкодить?
12. Какие практики бандлов Из документации мне совсем не понятно что такое и для чего нужны бандлы. Как я понял - это собранные пакеты css и js, но куда их нужно пихать и зачем - непонятно.
13. Борщик Для чего борщик существует внутри enb, ведь в enb есть другие инструменты, для работы с файлами. В чем его отличие и назначение?
Возможно, многие вопросы очевидные или неправильно сформулированы, про неправильное пользование той или иной технологией. Каждый из этих вопросов - для меня важный, прошу, если вы знаете ответ или имеете мнение хоть по одному из них - не стесняйтесь.
Всем привет.
У меня прекрасно собирается статика стандартным способом (с помощью конфигурационного файла .borschik и некоторых изменений в .enb), когда ресурсы явно прописаны в стилях или bemjson.
Можно ли как-то с помощью борщика попробовать зафризить картинки в случае динамической сборки компонента, когда пути заранее неизвестны или навешиваются на DOM-элемент инлайн-стилями? Например, так:
block('card')(
attrs()(function () {
var attrs = {},
url = this.ctx.url;
if (url) {
attrs.style = 'background:url(' + url + ') no-repeat';
}
return attrs;
})
);
Возможно, я выбрал неправильный подход? Буду благодарен за помощь.
Проект тут: https://github.com/mikhailmakarov/zhifu-first-bem
Задача собрать всю статику и html, css, js в папку dist. Подскажите пожалуйста.
Я только начал изучать BEM. Может я что-то не правильно делаю.
Вот что в npm-debug.log при выполнении команды npm run dist:
17 error Windows_NT 6.3.9600
18 error argv "C:\Program Files\nodejs\node.exe" "C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js" "run" "dist"
19 error node v5.1.1
20 error npm v3.3.12
21 error code ELIFECYCLE
22 error zhifu-first-bem@1.0.0 dist: YENV=production enb make dist
22 error Exit status 1
23 error Failed at the zhifu-first-bem@1.0.0 dist script 'YENV=production enb make dist'.
23 error Make sure you have the latest version of node.js and npm installed.
23 error If you do, this is most likely a problem with the zhifu-first-bem package,
23 error not with npm itself.
23 error Tell the author that this fails on your system:
23 error YENV=production enb make dist
23 error You can get their info via:
23 error npm owner ls zhifu-first-bem
23 error There is likely additional logging output above.
24 verbose exit [ 1, true ]
Можно не писать постоянно ../../..
, а например всему борщику сказать, что ищи не найденные файлы в bower_components или libs?
как это сделано в postcss-import
//вместо
/* borschik:include:../../../libs/owl.carousel/dist/owl.carousel.js */
//так
/* borschik:include:libs/owl.carousel/dist/owl.carousel.js */
Трудность: Borschik не склеивает /* borschik:include:../../libs/smothScroll/js/smothScroll.js */ в один файл. Файл рабочий, пути правильные, декларация плагинов правильная.
Вопрос: Как починить борщик, если переустановка не помогает?
Предположения: У меня в проекте в папке node_modules установлено 3 борщика. Возможно они конфликтуют. borschik-tech-cleancss borschik enb-borschik
Вот весь текст
/* global modules:false */
modules.define('jquery__smothScroll', ['jquery'], function(provide, $) {
window.jQuery = $;
/*borschik:include:../../libs/smothScroll/js/smothScroll.js*/
provide($);
});
Есть простой плагин прокрутки на Jquerry. )) Сейчас вот так в конце index.html:
<script src="js/plugins-scroll.js"></script>
<script>
$(document).ready(function() {
try {
$.browserSelector();
if($("html").hasClass("chrome")) {
$.smoothScroll();
}
} catch(err) {
};
});
</script>
Как Это подключается через БЭМ? P/S: Спасибо!
Привет!
Некоторое время назад обсуждалась возможность научить борщик склеивать картинки в спрайты. В итоге, сейчас это есть?
Подскажите пожалуйста как круто сделать сборку, чтоб передать верстку. Dist, в котором будут сложены изображения, заменятся пути и будет красиво отформатированный HTML.
Что нужно установить? Что дописать? Какие команды запустить?
Есть два уровня переопределения, в них есть по блоку
Верхний angular.js /borschik:include:../../libs/angular/angular.js/ /borschik:include:../../libs/angular-ui-router/release/angular-ui-router.js/
Мой блок
/borschik:include:../../libs/angular/angular.js/ /borschik:include:../../libs/angular-route/angular-route.js/ /borschik:include:../../libs/angular-resource/angular-resource.js/ /borschik:include:../../libs/angular-ui-router/release/angular-ui-router.js/
При этому браузер сообщает ошибку "WARNING: Tried to load angular more than once." То есть верхний уровень, как-то странно переопределяется, видимо из-за сборщика. Подскажите как поступить?
Добрый день.
Начал делать проект на bem + angular. Для блока angular.js
/*borschik:include:../../libs/angular/angular.js*/
/*borschik:include:../../libs/angular-ui-router/release/angular-ui-router.js*/
// Hello World!
В index.js скрипт подключает, но файлы не инклюдит.
/* end: ../../libs/bem-ng/common.blocks/angular/angular.js */
/* begin: ../../service.blocks/angular/angular.js */
/*borschik:include:../../libs/angular/angular.js*/
/*borschik:include:../../libs/angular-ui-router/release/angular-ui-router.js*/
// Hello World!
Все библиотеки существую и лежат в lib
Подскажите, что не так? Спасибо.
Всем привет подскажите пожалуйста, в итоговом css путь к картинке меняется на относительный путь к блоку. Например: (../../common.blocks/icon/_image/i/cart.png). В .borshik прописано "i/**": "/images/". В make.js enb следущее [borschikTech, { sourceTarget: '?.css', destTarget: '?.min.css', tech: 'cleancss', freeze: true, minify: isProd }]. Я так понимаю борщик не работает, а пути меняет сам enb?! Как это исправить?
В нашем проекте где используем БЭМ заметили интересное поведение для некоторых свойств CSS при переопределении и при семантическом объединении борщиком.
[borschik,
techOptions: {
semanticMerging: true
},
//...
]
Это проявляется на старых браузерах или браузере с обрезанным функционалом.
Если свойство, к примеру background
объявить в обобщенном виде, а не отдельно по параметрам, пример:
.block {
background: url(i/arrow.png) center center no-repeat;
}
При это в дальнейшем переопределить одно из указанных свойств
.block {
background-image: url(i/yellow-arrow.png);
}
То переопределение может сработать не корректно, и часто поведение (особенно на short-браузерах) будет похоже на гейзенбаг.
Решение пока нашли в том, что все свойства объявляем подробно:
.block {
background-image: url(i/arrow.png);
background-position: center center;
background-prepeat: no-repeat;
}
Настроена сборка, css и js файлы пропускаются через borschik.
Хочется чтобы внутри css .svg
и .png
инлайнились, а внутри js .svg
и .png
указанные через borschik.link
ложились в папку images
.
Сейчас текущий конфиг такой
{
"freeze_paths" : {
"libs/**": ":base64:",
"libs/**/*.svg": ":encodeURIComponent:",
"*.blocks/**": ":base64:",
"*.blocks/**/*.svg": ":encodeURIComponent:",
"*.bundles/blocks/**": ":base64:",
"*.bundles/blocks/**/*.svg": ":encodeURIComponent:",
"*.bundles/**/images/**": "dist/images"
}
}
Добрый вечер. Хочу собрать проект и с путями возникает вопрос, у меня есть '../../images/' , а нужно 'images/'. Кажется, что все тривиально и глупее вопроса сложно придумать, бери да вручную их меняй:) но как-то это не солидно, ведь есть borschik, а он что-то не варится. Хотя, скорее всего, проблема в моем котелке. Настройки make.js [borschikTech, { sourceTarget: '?.html', destTarget: '?.borschik.html', freeze: true }], [borschikTech, { sourceTarget: '?.css', destTarget: '?.min.css', tech: 'cleancss', freeze: true }], [borschikTech, { sourceTarget: '?.js', destTarget: '?.min.js', freeze: true, minify: isProd }] И странно, что запись в .borschik типа {"freezepaths": { "images/**" : "img/"}} меняет только пути .css, не замечая .html. Помогите разобраться
Сделал новое открытие, борщик не умеет распознавать пути в JSON. И другие параметры начинает воспринимать как часть пути.
Получается борщик бесполезнее чем ожидалось.
Может быть я ошибаюсь, и там надо что-то подкрутить?
Может кто подскажет по чему?
[borschikJs, {
sourceTarget: '?.js',
destTarget: '_?.js',
techOptions: {
uglify: {
quote_style: 1
}
},
minify: true,
freeze: true,
noCache: true
}]
Столкнулся с проблемой что borschik не перемещает файлы шрифтов с форматом .woff2 Это баг или фича?
Добре коллеги!
Случайно выяснил, что борщик минимизирует css как-то не очень хорошо.
Работаю с enb-borshchik
Дело в том, что он не производит семантическое объединение классов. Которое просто необходимо для тех случаев когда хотим использовать base64 в css.
Что же это такое семантическое объединение?
Рассмотрим пример:
Есть файл a.css
.a {
left: 20px;
background: #red;
}
.b {
left: 1px;
}
.k .a {
left: 20px;
background: #red;
}
.a {
right: 20px;
left: 1px;
background: url(./resources/images/1280x720-tv-background__overlay_info.png);
}
.b {
left: 2px;
}
.k .a {
right: 20px;
left: 1px;
background: url(./resources/images/1280x720-tv-background__overlay_info.png);
}
После семантического объединения должны получить следующее:
.a, .k .a{
right:20px;
left:1px;
background:url(resources/images/1280x720-tv-background__overlay_info.png)
}
.b { left:2px }
Делать это умеет библиотека: https://www.npmjs.com/package/clean-css
с включенной опцией --semantic-merging
Вопрос - как решить задачу семантической сборки css для enb?
Может уже решали данную проблему до меня?