Что в коробке:
- простой API
- поддержка
.js
,.json
,.coffee
,.eco
,.jade
- develop-mode ready — легко встроить в express, умный кеш с инвалидацией
- малый overhead на bundle ~ 40 SLOC
- простой механизм подмены модулей и имитации глобальных объектов
Основная фишка, которую я хотел решить — нативное использование CommonJS модулей, в том числе и зависимостей, устанавливаемых через npm. Понятно, что модули, использующие IO или имеющие C-биндинги работать не будут, но большой пласт простых модулей вполне можно перенести на клиента.
Вторая фишка — мне нравится разработка через тестирование, в идеале — весь клиентский код хорошо бы прогонять через mocha, в автоматизированном варианте.
Ну и приятные бонусы — разумное количество «обвязочного» кода, однозначное разрешение зависимостей, поддержка версий, исключение дубликатов, возможность иметь на странице любое количество бандлов.
На мой взгляд все идеи были вполне успешно реализованы.
Установка — локальная npm install clinch
.
Ну и простой пример использования:
#!/usr/bin/env coffee Clinch = require 'clinch' packer = new Clinch() pack_config = bundle : main : "#{__dirname}/hello_world" packer.buldPackage 'my_package', pack_config, (err, data) -> console.log 'Builder, data: \n', data
для ‘hello_world.coffee’, содержащего
module.exports = hello_world : -> 'Hello World!'
на выходе даст примерно такой результат
(function() { <... skip clinch header ...> dependencies = {}; sources = { "2377150448": function(exports, module, require) { module.exports = { hello_world: function() { return 'Hello World!'; } }; }}; this.my_package = { "main": require(2377150448)}; }).call(this);
И в браузере функция будет доступна вот так
hello_world = my_package.main.hello_world
Если идея инжекта в глобальный объект новых свойств не нравится — можно его отключить, кроме того есть несколько настроек для jade-компилятора.
У проекта есть русскоязычный мануал, который наверняка станет лучше благодаря вашим вопросам и замечаниям.
Кроме того, есть демо-проект, в котором можно посмотреть код и результаты на клиенте.
PS. Буду безмерно благодарен всякому, кто научит писать хорошие мануалы.
ссылка на оригинал статьи http://habrahabr.ru/post/172831/
Добавить комментарий