Столкнулся с этой ошибкой когда решил положить блоки и бандлы в папку src/ на проекте и настроить сборку так.
/
.bem/
src/
desktop.blocks
desktop.bundles
в make.js
соответственно указал
getBundlesLevels: function() {
return [
'src/desktop.bundles'
];
}
Сборка происходит нормально, но в такой схеме сервер падает на этом then
BEMTREE.apply(json)
.then(function(bemjson) {
res.send(BEMHTML.apply(bemjson));
});
А если положить эти же папки, блоков и бандлов, в корень то все отрабатывает как надо.
Подскажике как поправить и настроить предложенную выше схему.
Весь кусок про сервер и шаблонизацию
var bemtreeTemplate = FS.readFileSync( './src/desktop.bundles/index/_index.bemtree.js'),
bemtmlTemplate = FS.readFileSync( './src/desktop.bundles/index/_index.bemhtml.js');
var context = VM.createContext({
Vow: vow,
console: console,
borschik: {
link: function(i) {
return i;
}
}
});
VM.runInContext(bemtreeTemplate, context);
BEMTREE = context.BEMTREE;
VM.runInContext(bemtmlTemplate, context);
BEMHTML = context.BEMHTML;
BEMTREE.apply(json)
.then(function(bemjson) {
res.send(BEMHTML.apply(bemjson));
});
нет возможности выложить код куда-нибудь?
Можно попробовать как-нибудь вывести в консоль ошибку,
BEMTREE.apply(json).fail(data)
или reject(data).@tadatuta http://github.com/voischev/thenProblem
Все дело в том, что функция
getLevels
, возвращающая пути до уровней, использует метод buildLevel, в котором проверяется текущий путь, чтобы определить платформу. И из-за того, что теперь к пути добавилосьsrc
, то не работает вот этот маппинг.Чтобы исправить, можно либо на 49 строке сделать
desktop
->src/desktop
, либо стрипатьsrc
в методеbuildLevel
.Ну и на всякий случай напомню, что в версии
bem-xjst
, которая используется в последней версииbem-core
, есть баг, так что вbower.json
нужно явно зафиксироваться на предыдущей версии, пока мы не выпустимbem-core
с фиксом.@voischev а есть ли смысл?
Может .bem тоже перетащить в src, и тогда если нужен make — bem.api.make({root: "./src"}...), если нужно подключить бандл — дописываешь ./src в начало.
@zxqfox ну в этом тоже не больше смысла
@voischev ну не знаю, на мой взгляд сборка проекта заканчивается, когда запускается
express
или что-то вроде него и начинается рендеринг страниц из шаблонов. Т.е..bem
уже не нужен, нужны только разныеsome.bundles/A/A.tech
файлы, которые будут отдаваться somehow в браузер, и использоваться на бекенде. В т.ч. не только js. Поэтому, я не вижу смысла в таскании.bem
на боевой.@zxqfox что не нужно когда запускается экспресс думаю должен решать деплой скрипт. Тут я преследовал удобство разработки, не сильно уходя от предложенных решений
@voischev Это можно решить, например, чем-то типа
bem.opts
, в которых прописать-r ./src
Кстати, express-bem умеет рулить такое. Может быть чего-то другого не умеет, но это умеет.