这个问题更具理论性和实用性。 假设我有基于PHP框架Symphony / Zend的项目,我也使用gulp进行前端工作。我想以专业的方式做这个项目,所以我使用gulp插件,如jade,clean,uglify,minify,gzip,imagemin和 rev 。如果有人不知道这是什么gulp-rev,我们在这里:
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风格和现在的东西? 如何在不需要从PHP框架中更改phtml文件的情况下重新运行gulp任务?或者我是否必须在每个phtml文件中手动更改修改过的文件? 如果是这样,那么使用像gulp-rev这样的插件有什么意义呢?仅适用于静态网站?据我所知,没有任何插件可以使用PHP标签将jade文件转换为phtml
答案 0 :(得分:1)
您需要使用gulp-inject将新创建的文件注入特定位置。
<!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>
答案 1 :(得分:0)
仅适用于静态网站?
大多是的。
要使用php执行相同的操作,您应该使用包装函数来显示资源资产URL。
该包装函数将获取相对URL,将其与实际文件路径匹配,获取文件的最后更新时间并将其附加到返回的URL url/to/asset.some?l=<filemtime value>
请参阅http://php.net/manual/fr/function.filemtime.php
我必须提到另一种方法是通过grunt构建链构建您的php文件,请参阅wiredep。但我不推荐它。见https://github.com/stephenplusplus/grunt-wiredep
答案 2 :(得分:0)
使用map:
插件gulp-rev生成rev-manifest.json
文件
{
"css/main.css": "css/main-f95991b528.css",
"js/main.js": "js/main-5598f71801.js"
}
在使用php中的elixir函数的Laravel框架中有一个漂亮的解决方案。
<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.");
}