Привет всем!
Сегодня на github была выложена годная beta-версия нового сборщика js/coffee проектов - clinch.
Если коротко, то это stitch, только лучше - используется парсинг кода на предмет зависимостей, а не сбор всего, что попадется в папках.
Если коротко, это browserify, только лучше - "обвязочный" код составляет около 40 строк, вместо 300-600, плюс все хорошо настраивается из конфига - никакой магии и умолчального поведения.
Цель создания clinch - мне нужен был быстрый упаковщик coffee-проекта, в коде которого можно использовать в зависимостях npm-модули.
Например - нужен нам sprintf. В stitch его бы пришлось указывать в зависимостях и шаманить в коде. В clinch эта зависимость просто разрешается и в готовом бандле на клиенте оказывается рабочий вариант sprinf.
Для итоговой сборки используется концепция бандла (bundle), т.е. набор из любого количества элементов, очень удобно для упаковки каких-то небольших компонентов, не целого приложения, хотя и приложение можно завернуть.
Получившийся бандл экспортируется на страницу в собственную переменную, т.е. для страницы не определяется никаких квази-require. Таким образом можно на одной странице иметь сколько угодно бандлов, пока они различаются по именам - все будет отлично.
Как это работает - как обычный node-модуль. Никакого cli, никаких веток в package.json, никаких web_modules папок.
Только конфиг пакета и асинхронное получение результата в виде строки. Дальше пишем его (результат) в файл сразу, или минимизируем, или отдаем через express/connect.
Что с middleware? Clinch сам себе middleware, в том смысле что он кеширует результаты(и инвалидирует кеш если файлы изменились), так что все работает из коробки.
Что со скоростью - она вполне приличная, можно смело использовать на develop сборку на лету. Для продакшена, конечно же - соберите все заранее в статику.
Описание API и конфигов есть на странице проекта, старался все делать максимально просто, самому же пользоваться.
На результаты его работы можете посмотреть тут:
Из вкусных плюшек - нет дублей, но есть версии. Т.е. если разные модули используют разные версии чего-то в зависимостях - они получат то, что нужно. Если же несколько файлов одинаковые - будет упакован только один.
Буду признателен за фидбек, предложения, замечания и сообщения о проблемах - мне интересны случаи, когда clinch не справится с задачей. Пишите, будем улучшать.
Митяй.
PS. Пока нет source map - пока даже и не знаю, с какой стороны к этому подступиться. Есть у кого-нибудь опыт в этой области?