Open o5e2e2 opened 8 years ago
Спасибо, про настройку сборки стало ясно.
Но теперь появился вопрос, что такое пользовательские шаблоны, которые форсируют включение BEMHTML в сборку JS? Видимо, это самый рекомендуемый способ использования шаблонизатора?
Пользовательские шаблоны — это любые шаблоны, которые по зависимостям попадут в клиентский JS:
// some-block.deps.js
[{
shouldDeps: ['any-block'] // зависимости вида технология к технологии (css попадет в css, js — в js)
}, {
tech: 'js', // зависимости для технологии js
shouldDeps: [{
{ block: 'any-block', tech: 'bemhtml' } // технология bemhtml блока any-block попадет в технологию js результирующего бандла, т.е. на клиент приедет шаблон any-block
}]
}]
Как правильно прописать зависимость блока от BEMHTML? Добавление "forceBaseTemplates: true" в нужное место .enb/make.js и shouldDeps: ['BEMHTML'] оказалось недостаточно.
я привел пример правильного deps.js в предыдущем комменте: нужно писать зависимость от нужных блоков по технологиям (клиентский js зависит от bemhtml).
Но если forceBaseTemplates
действительно оказался в нужном месте, этого уже должно быть достаточно, чтобы BEMHTML.apply()
выводил что-то осмысленное, а не пустую строку.
Взял чистый bem/project-stub v1.6.0, добавил блок и прописал его в index.bemjson.js
modules.define('test-bemhtml', ['BEMHTML', 'i-bem__dom'], function(provide, BEMHTML, BEMDOM) { provide(BEMDOM.decl(this.name, {
onSetMod: {
js: {
inited: function () {
var bemjson = { tag: 'h1', content: 'Hello, World!' };
var html = BEMHTML.apply(bemjson);
console.log('"' + html + '"');
}
}
}
}))});
.enb/make.js:59
[techs.bemhtml, { sourceSuffixes: ['bemhtml', 'bemhtml.js'], forceBaseTemplates: true }],
Пишет в консоли две кавычки. Чего ему не хватает?
Так здесь же forceBaseTemplates
и так был, а добавить нужно вот здесь: https://github.com/bem/project-stub/blob/master/.enb/make.js#L82-L86
Спасибо. В v1.6.0 не было, но добавил, где вы сказали, и заработало.
BEMHTML.apply() всегда возвращает пустую строку. Что-то тут не так.