Этот вопрос более теоретический, чем практический.
Допустим, у меня есть проект, основанный на PHP-фреймворке Symphony / Zend, я также использую gulp для работы в веб-интерфейсе. Я хотел бы сделать этот проект профессионально, поэтому я использую плагины gulp, такие как jade, clean, uglify, minify, gzip, imagemin и оборот. Если кто-то не знает, что это за глоток-рев, мы идем:
Static asset revisioning by appending content hash to filenames unicorn.css → unicorn-d41d8cd98f.css
Хорошая вещь для кэширования статических файлов, например.
Итак, вот проблема …
Я запускаю задачи gulp и получаю следующие файлы:
- assets
- css
- style-bfd65634.css
- js
- vendor-mkg5454.js
- img
- background-ok54353.png
etc...
После того, как я закончу свою работу с внешним интерфейсом, я хочу поместить ее в файлы представления PHP-фреймворка (файлы phtml), например:
layout.phtml
...
<link type="text/css" rel="stylesheet" media="screen" href="<?php echo $this->basePath(); ?>/assets/css/style-bfd65634.css">
...
<div id="logo">
<img src="<?php echo $this->basePath(); ?>/assets/img/background-ok54353.png" />
</div>
...
То же самое относится и к js-файлам, изображениям и т. д.
Через несколько недель мне нужно что-то изменить в стилях CSS и что теперь?
Как я могу перезапустить задачи gulp без необходимости изменять phtml-файлы из PHP-фреймворка? Или мне нужно вручную изменять измененные файлы в КАЖДОМ phtml файле?
Если так, то какой смысл использовать такие плагины, как gulp-rev? Просто для статических сайтов? Насколько я знаю, нет ни одного плагина, который бы конвертировал нефритовые файлы в phtml с помощью PHP-тегов.
Вам нужно использовать Глоток-инъекционные внедрить эти вновь созданные файлы в определенном месте.
<!DOCTYPE html>
<html>
<head>
<title>My index</title>
<!-- inject:css -->
<link rel="stylesheet" href="/src/style1.css">
<link rel="stylesheet" href="/src/style2.css">
<!-- endinject -->
</head>
<body>
Просто для статических сайтов?
в основном да.
Чтобы сделать то же самое с php, вы должны использовать функцию-обертку для отображения URL ресурса ресурса.
Эта функция-обертка примет относительный URL-адрес, сопоставит его с фактическим путем к файлу, получит время последнего обновления файла и добавит его к возвращенному URL-адресу, например url/to/asset.some?l=<filemtime value>
увидеть http://php.net/manual/fr/function.filemtime.php
Я должен упомянуть, что альтернативным способом является сборка вашего php файла через цепочку сборок grunt, см. Wiredep. Но я не рекомендую это. увидеть https://github.com/stephenplusplus/grunt-wiredep
Плагин глоток-рев продукции rev-manifest.json
файл с картой:
{
"css/main.css": "css/main-f95991b528.css",
"js/main.js": "js/main-5598f71801.js"}
В фреймворке Laravel есть красивое решение эликсир функция в php.
<link rel="stylesheet" type="text/css" href="<?php echo elixir("css/main.css") ?>">
А также elixir
функция:
function elixir($file)
{
static $manifest = null;
if (is_null($manifest)) {
$manifest = json_decode(file_get_contents(public_path('build/rev-manifest.json')), true);
}
if (isset($manifest[$file])) {
return '/build/'.$manifest[$file];
}
throw new InvalidArgumentException("File {$file} not defined in asset manifest.");
}