Каждый раз, когда Gulp изменяет файлы CSS или JS, он сохраняет имя выходного файла так же, как и раньше. Как браузер узнает, что файл был изменен и ему нужно перезагрузить css и JS-файлы?
Чтобы решить эту проблему, я решил использовать следующий плагин Gulp:
https://github.com/sindresorhus/gulp-rev
он переименовывает файл активов, добавляя хэш хэда к именам файлов
unicorn.css => unicorn-098f6bcd.css
есть ли способ включить файл активов с помощью php динамически? Имя актива будет меняться каждый раз при добавлении нового контента.
вместо переименования файла вы можете отправить отпечаток пальца. если изменения файла, последние измененные изменения тоже. поэтому вы можете легко использовать последний модифицированный файл в качестве отпечатка пальца:
public function putStyle($fileName) { $fp = filemtime($fileName); // finger print by file last modified $fileName .= '?' . $fp; echo '<link rel="stylesheet" href="' . $fileName . '"/>'; }
Я нашел способ включить файл динамически. его быстрый (занимает около 1,5 мс) и отлично работает.
PHP имеет встроенную функцию (glob) для поиска файлов. Согласно PHP docs « Функция glob () ищет все шаблоны, соответствующие шаблону, в соответствии с правилами, используемыми функцией libc glob (), которая аналогична правилам, используемым общими оболочками ».
Glob ()
// css path would be the full physical path of your css directory $cssPath = '/css/*.css'; $stylesheets = glob($cssPath, GLOB_NOSORT); // link all stylesheets <?php foreach($stylesheets as $stylesheet): ?> <link rel="stylesheet" href="css/<?=basename($stylesheet)?>"> <?php endforeach; ?>