[MinifyX] Версия 1.6.0
Вот и новая версия 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 метода в класс MinifyX — getFileUrl
и getFilePath
. Первый возвращает URL к скомпилированному файлу. Второй пригодится для работы с файловой системой.
Лайфхак
Если вы хотите предварительно сгенерировать особо большие файлы в админке, то поставьте дополнение Console и выполните в нём сниппет через $modx->runSnippet('MinifyX')
с нужными параметрами.
Ну и поправил разные баги, которые встретил при погружении в код.
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()