3

这个问题更多的是理论而不是实际。假设我有基于 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 之类的插件有什么意义呢?只适用于静态网站?据我所知,没有任何插件可以将jade文件转换为带有PHP标签的phtml

4

3 回答 3

2

您需要使用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>
于 2016-05-17T11:23:30.427 回答
0

插件 gulp-rev 生成rev-manifest.json带有地图的文件:

{
  "css/main.css": "css/main-f95991b528.css",
  "js/main.js": "js/main-5598f71801.js"
}

Laravel 框架中有一个漂亮的解决方案,在 php 中使用了elixir函数。

<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.");
    }
于 2016-05-17T12:22:16.693 回答
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

于 2016-05-17T09:49:00.157 回答