Автоматическое добавление версий файлов с помощью хуков Git

Хорошей практикой при разработке тем и плагинов для WordPress является добавление номеров версий к скриптам и файлам стилей. Если этого не делать, то старые пользователи могут столкнуться с проблемами при обновлениях, ведь они будут получать кэшированные в браузерах старые файлы, а не новые, над которыми вы так усердно работали всю ночь.

Большинство решений сводятся к использованию функции filemtime для определения времени последнего изменения файла. У новичков она часто не работает по причине неверного указания путей к файлам, но даже так бывают ситуации, когда возможностей такого подхода не хватает и требуется бОльшая степень контроля за обновлениями.

В таком случае можно создать константу, содержащую в себе номер версии всего проекта целиком, и обновлять эту константу при каждом коммите, с помощью хука pre-commit.

Вот как это делается:

  1. Открыть в проекте папку .git/hooks/
  2. Найти или создать файл pre-commit (не pre-commit.sample)
  3. Добавить команды которые записывают в файл общее количество коммитов в репо
  4. При наличии файла www/wp-content/build_number в wp-config.php объявляется константа BUILD_NUMBER с цифрой

Содержимое файла pre-commit

#!/bin/bash
git rev-list --all --count > www/wp-content/build_number
git add www/wp-content/build_number

Новые константы в wp-config.php

// указываем путь к файлу с номером сборки
$build_number_file = ABSPATH . '/wp-content/build_number';

// если файл существует, кладем его содержимое в константу
if ( file_exists( $build_number_file ) ) {

define( 'BUILD_NUMBER', (int) file_get_contents( $build_number_file ) );

}

// Используем номер сборки для константы ASSETS_VERSION, и текущее время для облегчения дебага без необходимости коммита 

if ( defined( 'WP_DEBUG' ) and WP_DEBUG ) {

define( 'ASSETS_VERSION', time() );

} else {

define( 'ASSETS_VERSION', defined( 'BUILD_NUMBER' ) ? BUILD_NUMBER : date( 'Ymd' ) );

}

Добавляем константу с номером версии в стили и скрипты

// подключение скриптов с константой версии

wp_enqueue_script( 'wordpressify-scripts', get_template_directory_uri() . '/assets/js/scripts.min.js', [ 'jquery' ], ASSETS_VERSION, true );

// подключение стилей с константой версии

wp_register_style( 'wordpressify-css', get_template_directory_uri() . '/assets/css/style.min.css', [], ASSETS_VERSION );

wp_enqueue_style( 'wordpressify-css' );

Теперь можно использовать константу не только для добавления версий к скриптам и стилям, а вообще в любом месте проекта, где это необходимо.

Ошибки и пути решения

Иногда первая строка файла pre-commit может быть такой: #!/bin/sh

P.S. Спасибо Жене Великому за идею.

Павел Федоров

Создатель этого сайта и многих других (на WordPress, конечно же). Любит WordPress и делает на нем всякие сумасшедшие сложные штуки, которые никто в здравом уме делать не станет. Умеет работать на фрилансе, в офисе, без офиса, без оглядки и без сна. Один из немногих участников программы FSA/FLEX, кого выдворили из Америки за плохое поведение. С тех пор умеет слушать. Обожает Star Wars, Ведьмака, горные лыжи, байдарку, пешие прогулки, спонтанные путешествия и хорошую компанию. Больше не боится vim.

Добавить комментарий

%d такие блоггеры, как: