Вот и новая версия MinifyX не долго заставила себя ждать. Что нам она сулит? Первым делом обновил все зависимости пакета Munee. Через не хочу. Ибо было страшно. И интуиция меня не подвела. MinifyX не запустился — fatal error. Слава Богу, это легко починилось.

Важно!

Обновлённый пакет tedivm/jshrink требует версию PHP 5.6. Так что будьте внимательны при обновлении. На всякий случай всё проверьте.

Кстати, была надежда, что обновлённый пакет для обработки CSS sabberworm/PHP-CSS-Parser будет понимать единицы измерения vmax и vmin. Но чуда не случилось. Ради интереса решил глянуть, что же за фигня такая. Оказалось просто кривая проверка. В нём жестко забит список единиц измерения, среди которых есть и vm и vmax и vmin. Список отсортирован по длине названия. Так вот, в цикле проверяется вхождение предустановленных единиц измерения в текущую по возрастающей длине, начиная с единицы («%»,«s»). И получается, что результат проверки вхождения vm в vmax или vmin даёт положительный результат. И до проверки типа "vmax" входит в "vmax" дело уже не доходит. На мой взгляд, реализация проверки крайне странная. Если уж проверять вхождение, то как минимум начинать проверку в обратном порядке. Но что уж есть. Поэтому придётся обходится хуком «fixVm.php», добавленным в этой версии.

У сниппета появились параметры «cssTpl» и «jsTpl», в которых можно указать шаблоны для вывода файла стилей и скриптов. Думаю, пояснять ничего не нужно.

Теперь вы можете указывать полное имя файла, а не как раньше только префикс («all», «styles» и т.п.). Он и будет создан, а не хешированный файл типа «styles_2k784axf49.min.css». Тут есть несколько подводных камней. Если указать префикс, то MinifyX будет создавать новый файл при каждом изменении исходников (с новым хэшем). В процессе разработки таких файлов может быть очень много. Это, конечно, легко лечится очисткой кэша или простым удалением. Но ведь хочется гармонии и автоматизации. :) А если файл с таким именем уже существует, то MinifyX не будет его переписывать (из-за оптимизации). Таким образом, если вы указываете конечное имя файла, то изменения в исходниках не влияют на имя, а значит файл перезаписываться не будет. Именно для такого случая в сниппет добавлен параметр forceUpdate, который заставляет MinifyX перезаписывать файлы без проверки существования файла.

Ещё тут вступает в дело кэширование браузера. Но тут всё просто — или Ctrl+F5 или добавляем тег версии в шаблоны, типа <link rel="stylesheet" href="[[+file]]?v=1.0">.

Третья проблема — при очистке кэша удаляются только файлы, соответствующие определённому условию — в имени файла должен быть хэш указанной длины. Поэтому файлы с пользовательским именем, скорее всего, проигнорируются. Для решения этой проблемы добавлена системная настройка forceDelete. Если указать true, то в указанной папке кэша будут удалены все(!) файлы.

Следующая доработка (если подсмотреть в changelog) — добавлена опция «print» в параметры registerCss и registerJs. Если её указать, то сниппет вместо регистрации файла через методы modX::regClientCss и modX::regClientScript выведет код в месте вызова сниппета. Это может быть удобно в случае, если сниппет вызывается несколько раз и с разными настройками. Например, в секции head страницы для регистрации стилей, а в футере для регистрации скриптов.

Для работы в хуках добавлены 2 метода в класс MinifyXgetFileUrl и getFilePath. Первый возвращает URL к скомпилированному файлу. Второй пригодится для работы с файловой системой.

Лайфхак

Если вы хотите предварительно сгенерировать особо большие файлы в админке, то поставьте дополнение Console и выполните в нём сниппет через $modx->runSnippet('MinifyX') с нужными параметрами.

Ну и поправил разные баги, которые встретил при погружении в код.

22 января 2018, 23:50   726     0

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.