BEMHTML.apply() всегда возвращает пустую строку. Что-то тут не так.
var BEMHTML;
(function(global) {
function buildBemXjst(__bem_xjst_libs__) {
var exports = {};
exports.apply = function () { return ""; };
return exports;
};
var defineAsGlobal = true;
// Provide with CommonJS
if (typeof module === 'object' && typeof module.exports === 'object') {
exports['BEMHTML'] = buildBemXjst({
}
);
defineAsGlobal = false;
}
// Provide to YModules
if (typeof modules === 'object') {
modules.define(
'BEMHTML',
[],
function(
provide
) {
provide(buildBemXjst({
}
));
}
);
defineAsGlobal = false;
}
// Provide to global scope
if (defineAsGlobal) {
BEMHTML = buildBemXjst({
}
);
global['BEMHTML'] = BEMHTML;
}
})(typeof window !== "undefined" ? window : global || this);
ответ вот тут https://github.com/enb/enb-bemxjst/blob/master/api.ru.md#forcebasetemplates
Спасибо, про настройку сборки стало ясно.
Но теперь появился вопрос, что такое пользовательские шаблоны, которые форсируют включение BEMHTML в сборку JS? Видимо, это самый рекомендуемый способ использования шаблонизатора?
Пользовательские шаблоны — это любые шаблоны, которые по зависимостям попадут в клиентский JS:
Как правильно прописать зависимость блока от BEMHTML? Добавление "forceBaseTemplates: true" в нужное место .enb/make.js и shouldDeps: ['BEMHTML'] оказалось недостаточно.
я привел пример правильного deps.js в предыдущем комменте: нужно писать зависимость от нужных блоков по технологиям (клиентский js зависит от bemhtml).
Но если
forceBaseTemplates
действительно оказался в нужном месте, этого уже должно быть достаточно, чтобыBEMHTML.apply()
выводил что-то осмысленное, а не пустую строку.Взял чистый bem/project-stub v1.6.0, добавил блок и прописал его в index.bemjson.js
.enb/make.js:59
Пишет в консоли две кавычки. Чего ему не хватает?
Так здесь же
forceBaseTemplates
и так был, а добавить нужно вот здесь: https://github.com/bem/project-stub/blob/master/.enb/make.js#L82-L86Спасибо. В v1.6.0 не было, но добавил, где вы сказали, и заработало.