Есть у меня один проект, который реализует набор виджетов для desktop-like интерфейса: окошко с мнемосхемой в svg, таблицы, графики, панельки с наборами элементов управления. Каждый виджет состоит из одного или нескольких файлов – js-модуль с кодом и, иногда, css-стиль. В каждом файлике прописаны его зависимости в виде доморощенного решения – в начале файла, в комментарии содержится строчка вида:
/**
* make :: widgets.itable: webix observable widgets.itable-style
*/
;(function () {
// ... тут располагается код модуля ...
});
Как видно похоже на описание зависимостей в Makefile'ах (собственно это почти они и есть). При сборке проекта эти описания выдираются из файлов и скармливаются
make
'у, который конкатенирует их в нужной последовательности. Например при сборке вышеописанного фрагмента он увидит, что компонент
widgets.itable
зависит от компонентов
webix
,
observable
и
widgets.itable-style
, подгрузит эти компоненты и поместит их выше по тексту (
widgets.itable-style
сконкатенируется в css-файл, по конвенции все имена, оканчивающиеся на
-style
, конкатенируются туда).
Костылек небольшой, умещается в 2килобайтном мейкфайле, однако умеет он не все (скажем шрифты и картинки приходится встраивать в css или js), да и хочется чего-то стандартного.
Итак,
вопрос – существует ли решение которое:
- позволит описывать и использовать зависимости между компонентами,
- позволит удобно публиковать и подключать компоненты с использованием какого-нибудь локального хранилища, а не через общедоступный публичный реестр,
- будет иметь простейшую систему сборки, которая может решать задачи вида "сконкатенировать все и углифицировать"
?
Я знаю о существовании
bower
,
gulp
,
grunt
,
npm
, ничего из этого в отдельности как будто бы не делает все, что нужно. Может стоит рассмотреть какие-нибудь связки, вроде
grunt+bower
?