Добрый день! Возникла интересная ситуация после перехода с depsOld на deps. Сразу скажу мы используем самые свежие версии технологий и самого сборщика(enb).
Начала падать сборка styl
файлов т.к блок 'page' попадает в конец deps
файла, а в нем находятся переменные, функции, миксины и т.д. Это фича или баг :) ?
exports.deps = [
{
"block": "i-bem"
},
{
"block": "i-bem",
"elem": "internal"
},
{
"block": "inherit"
},
{
"block": "identify"
},
{
"block": "next-tick"
},
{
"block": "objects"
},
{
"block": "functions"
},
{
"block": "events"
},
{
"block": "i-bem",
"elem": "html"
},
{
"block": "i-bem",
"elem": "dom"
},
{
"block": "jquery"
},
{
"block": "loader"
},
{
"block": "loader",
"mod": "type"
},
{
"block": "jquery",
"elem": "config"
},
{
"block": "dom"
},
{
"block": "i-bem",
"elem": "dom",
"mod": "init"
},
{
"block": "i-ua"
},
{
"block": "i-jquery"
},
{
"block": "i-jquery",
"elem": "core"
},
{
"block": "ua"
},
{
"block": "page",
"elem": "css"
},
{
"block": "page",
"elem": "js"
},
{
"block": "b-wrapper"
},
{
"block": "b-header"
},
{
"block": "b-header-top"
},
{
"block": "b-header-top",
"elem": "region"
},
{
"block": "page"
},
{
"block": "b-radio",
"mod": "theme",
"val": "tower"
}
];
файл не стал весь копипастить, а только начало и конец.
А вот page.deps.js
({
mustDeps: [
{ block: 'i-bem', elems: ['html'] },
{ block: 'i-bem', elem: 'dom', mods: { init: 'auto' } },
{ block: 'i-ua' },
{ block: 'i-jquery', elems: 'core' }
],
shouldDeps: [
{
elems: ['css', 'js']
},
{
block: 'b-wrapper'
},
{
block: 'b-header',
},
{
block: 'b-content'
},
{
block: 'b-footer'
},
{
block: 'b-rouble'
},
{
block: 'b-link'
},
{
block: 'b-image'
},
{
block: 'b-media-cont'
}
]
})
Логично, что page ниже чем все блоки, которые у него в shouldDeps.
А кто зависит от page? Почему он должен быть в начале списка?
Кстати, если мне память не изменяет, это одно из важных отличий deps от depsOld.
shouldDeps ведут себя как mustDeps, до тех пор, пока это возможно.
@Hurtsok это скорее фича. Есть смысл переменные вынести в отдельный блок и отзависиться от него через
mustDeps
в блоках, которые используют переменные@apsavin @tadatuta
Почему это логично? Судя по документации у меня должна получиться сборка такая, где блок page будет выше чем блоки объявленные в shouldDeps. Ведь shouldDeps это зависимости идущие после самого кода блока.. Лог из доки это подтверждает
Из документации:
То есть, в принципе, они могут оказаться и ниже блока, который от них зависит. Но, насколько я знаю, если им ничего не мешает - они будут выше. Ниже они были в bem-tools. Скорее всего, кстати, статья ориентирована именно на сборку bem-tools.
Да, все именно так.
@apsavin @tadatuta
Возможно я чего-то не понимаю, но тогда сборка блока с его элементами и модификаторами приводит к непредсказуемому результату... Из моей сборки видно что
page__css
иpage__js
попали на самый верх, но сам их родитель в низу. Я согласен с порядком сборки самих блоков, но с элементами и модификаторами блока это не очень очевидно. Т.к я допустим я хочу до определить стили блока с помощью его модификатора, то получается, что модификатор может попасть в сборку выше чем сам блок? Или я не прав?про модификатор есть специальное условие, чтобы он по умолчанию оказывался ниже блока. но в целом, если порядок важен, нужно использовать
mustDeps
,shouldDeps
в общем случае порядок не гарантирует и даже если сегодня все совпало и собралось как хотелось, завтра появится какой-нибудь новый блок и при пересборке порядок shouldDeps-ов может как угодно измениться.@tadatuta @apsavin Спасибо вам за ответы, помогли понять :))