Улучшенный плагин для Smarty — Combine

    Плагин позволяет собрать и минимизировать несколько CSS или Javascript файлов воедино.
    image
    Мой плагин это лишь доработка плагина из этого поста Плагин для Smarty — Combine
    Узнать, что же нового я внес в плагин и как он работает можно под катом


    Плагин работает довольно просто: когда один из включаемых файлов изменяется, он создает новый выходной файл и возвращает к нему путь.

    Возможно, вы спросите: «А что же добавил я?». А ответ прост, в работу плагина добавлена минимификация файлов. Теперь файлы не просто склеиваются во едино, но еще и минифицируются с помощью Minify. К тому же добавлена возможность отключать склеивание файлов и минификацию, что удобно для девелопер разработок.

    У плагина есть список из четырех входных параметров:
    1. input, представляющий собой простой массив, содержащий в себе список путей к склеиваемым файлам;
    2. output, представляющий собой путь к выходному файлу;
    3. age, время в секундах между проверками на изменение одного из включаемых файлов. Этот параметр можно опустить, по умолчанию он равен 3600 секундам.
    4. debug, включает режим отладки. При включенном режиме отладке не компилирует и не минимизирует файлы, а выдает полный список файлов. Этот параметр можно опустить, по умолчанию он равен false.


    Исходный код

    Код доступен на GitHub.

    Образец подключения в шаблоне

    В Smarty 3 есть возможность создания массива на лету, поэтому код приведен с учетом этой возможности.

    {combine input=array('/js/core.js','/js/slideviewer.js') output='/js/big.js' age='30' debug=false}


    Для Smarty 2 массив нужно передавать через отдельную переменную.

    В php файле мы создаем нашу переменную с массивом файлов
    $js_filelist = array('/js/core.js','/js/slideviewer.js');
    $smarty_object->assign('js_files', $js_filelist);


    В файле шаблона подключаем
    {combine input=$js_files output='/cache/big.js' age='30' debug=false}


    При работе плагина есть несколько ньюансов. Путь к файлам должен идти от document_root, а папка с выходным файлом должна разрешать запись и создание новых файлов. Нельзя одновременно объединять файлы CSS и JS.
    Метки:
    Поделиться публикацией
    Похожие публикации
    Комментарии 4
    • +5
      Замечательная вещь. Только в нынешние времена, увы, ненужная. Весь процесс сборки фронтэнда давно отвоевал себе гулп, вебпак и ко. Пусть это и совершенно другая платформа, то там слишком много всяких возможностей, в том числе комьюнити, так что догнать по качеству и функционалу будет очень проблематично.

      Так что предлагаю не придумывать велосипеды (хотя никто не говорит, что это очень плохо), а переходить на более перспективные средства.

      Сам писал подобный пакет (на php конечно же), только он ещё налету умеет компилить исходники (в случае если они отличаются от нативных js и css) — coffee, typescript, sass, scss и less, генерировать карты для минифицированных файлов, создавать параллельно gzip файлики и html5 offline манифесты, анализируя внутренности. Отказался как раз в пользу гулпа, а это о чём-то, да говорит ;)
      • –1
        Не кто и не оспаривает возможности гугла, плагин я доработал для своих целей. В комментариях к первой статье о плагине, было много просьб о доработке.
        У меня в проекте как раз встала необходимость подобного функционала, поняв, что для Smarty не кто так и не сделал не чего лучше, дописал необходимые вещи и решил поделиться с пользователями хабра, возможно те кто оставлял комментарии к первой статье, возьмут и будут пользоваться.
      • +1
        Вы проверяете максимальный размер js файла-результата и количество CSS-правил?
        И на то, и на то в браузерах есть ограничения (привет, IE), а также ограничение на размер файла, подлежащего кешированию. Частенько бывает что какой-нибудь большой bundle.min.js весит больше, чем может упасть в кеш, и эти мегабайты будут грузиться снова и снова.

        btw, age — бесполезный параметр. достаточно сравнивать mtime
        • 0
          Спасибо за полезную информацию. Размер у меня не проверяется, но теперь обязательно реализую это,. я как то об этом и не подумал совсем.

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.