https://github.com/Shri-Hackathon/hackathon__0_name_habrareader - вот есть такой проект с использованием priv.jsХочется узнать как на project-stub прикрутить работу с priv.js, хотя бы самое простое
priv.js это "серверная" технология. project-stub / bem-tools используется лишь для её сборки (обычно получается конкатенацией priv.js блоков + bemhtml.js + i18n). для сборки нужно объявить технологию на уровне переопределения и дописать в список собираемых технологий .bem/make.js. пример есть по вашей ссылке.
"запускать" такой код оно не умеет. запускается он, собственно, уже самим web-сервером.
типичная логика запускания:
где, data это какие-то данные, формируемые из запроса.
основная проблема - редактирование и отладка. нужно держать отдельно запущенный "web-сервер". сервер, как правило, не умеет пересобирать ресурсы по запросу. поэтому при изменении кода сборка идет bem-tools'ами снаружи и нужно как-то все это синхронизировать -- сохранения файлов в текстовом редакторе, сборку bem-tools, и перезапуски "сервера". есть варианты с watcher'ами, supervisor и т.п.
при использовании enb (Марат, спасибо, я разобрался!), и express.js в роли "web-сервера", можно поступить хитрее, благодаря middleware , организовав сборку ресурсов по запросу прямо врнутри. (кстати, я когда-то делал похожую штуту для django - middlewarе для автоматической пересборки js и css - очень удобно).
В самом начале?
Т.е он получается заменяет bemjson, т.к priv.js должен вернуть bemjson?
Тогда как я себе это представляю:
Если это так, то получается мне не надо писать bemjson в бандле а использовать только priv.js?
в принципе логично, но такая схема не работает. по двум причинам.
priv.js является технологией уровня блоков и предназначен для динамической генерации bemjson. поэтому, чтобы собрать из блоков страничный priv.js, все зависимости (deps) нужно уже знать заранее.
по результату исполнения priv.js зависимости (bemdecl) строить нельзя, ведь какие-то блоки могут, при данном запросе, отсутствовать, а css и js, которые строятся по тем же самым зависимостям, собираются статически, т.е. должны включать в себя реализацию всех возможных блоков.
в данном случае bem tools используется только для сборки статики.
bem-tools : bemjson > bemdecl > deps > {css, js, bemhtml.js, priv.js}
больше он ни где не участвует.
динамика живет сама по себе:
поддерживаю! Женя, как вам написать про все это?
var blocks = {};
...
...
Т.е следующая конструкция не сработает как надо:
var priv = require('desktop.bundles/index/_index.priv.js'),
Так как в ней нет exports, должно как я понимаю быть exports.blocks
Мне нужно переписать технология или можно как то по другому сделать чтобы у меня после require в переменной priv было содержимое _index.priv.js
Подскажите, я nodeJs не знаю
в https://github.com/Shri-H ackathon/hackathon__0_nam e_habrareader/blob/master /.bem/techs/priv.js#L12 замените на
или типа того. priv.js это больше абстрактное понятие, нежели конкретная технология, т.к. сильно варьируется в зависимости от среды исполнения.
всем ответил в почту
Когда писали habrareader, смотрели на twitter-trends, рекомендую
общая логика такова, что bem tools не умеет строить зависимости по блокам, которые используются внутри priv.js. priv.js состоит из функций, а функция это черный ящик. поэтому, да, их нужно указывать явно в deps.js