Использую project-stub. Есть страница index(desktop.bundles). В ней подключаются блоки через конструкцию include:
var fs = require('fs'),
path = require('path'),
nodeEval = require('node-eval');
function include(filename) {
return nodeEval(fs.readFileSync(filename, 'utf8'), filename);
}
module.exports = {
block: 'page',
head: [
{ elem: 'css', url: 'index.min.css' }
],
scripts: [
{ elem: 'js', url: 'index.min.js' }
],
content: [
include('desktop.blocks/header/header.bemjson.js'),
]
};
Тем самым - это позволяет уйти от стандартного require, который кэширует содержимое. Но это не решает задачу в целом. Так как: Если изменить содержимое блока header и обновить страницу - изменения не подтянутся. Приходится вручную каждый раз делать любые изменения в самом index.bemjson.js (например добавив 1 таб), тогда блок header обновиться. Мое предположение: Сборщик считает, что файл index.bemjson.js не изменили и поэтому не пересобирает файл, а в блоках include ведь есть изменения. Возможно ли ему как то сообщить об этом, или отключить кэширование?
Предположение верное.
Отключить кэширование полностью легко — достаточно использовать флаг ’-n’.
А хорошим вариантом было бы использование вотчера.
Я правильно понимаю? В файле package.json дополняю scripts:
@tadatuta Если так то, это не работает. Работает только вот это: enb make --no-cache. Но каждый раз собирать весь проект не круто(
Вообще странно, должно работать с
enb server -n
. Но более эффективный вариант, конечно, с вотчером. Пример можно подсмотреть в https://github.com/bem/bem-express/blob/master/package.json#L80.Решил задачу следующим образом:
Автоматизировал через вотчер:
Команды для package.json
Вотчер отслеживает изменения в папе /components/ - там хранятся подключаемые через require файлы.
sh скрипт остановки сервера:
@yogas Решение рабочее, но работать будет медленно. Схема, используемая в bem-express, должна работать заметно эффективнее.
@yogas Почти через два года тему апнули) Уже врятли актуально. Я думаю многие ушли с enb/gulp на webpack