Gulp / Symfony2:如何在缓存清除时避免覆盖我的js / css导入?

时间:2015-08-17 17:03:54

标签: symfony caching twig gulp assetic

我的Symfony2应用程序有一个gulp构建过程,我正在尝试集成缓存清除,但遇到了障碍。我使用gulp-rev将哈希附加到我的连接的javascript文件中,并输出清单文件以在原始文件和散列文件名之间进行映射。我目前有一个twig模板,它有一个脚本标记来导入我正确构建的所有javascript文件,但是我需要找到一种方法来更新该脚本标记以指向具有正确哈希的文件版本,确保新鲜每次哈希更改时都会下载该文件的版本。

我已经想到了一些我在下面描述过的解决方案,但他们都没有感觉到对。有没有人有一个更好/正确的解决方案,或者为什么我应该采用我已经想到的方法之一。

  • 使用gulp-revreplaceapp.jsmy_template.html.twig的引用替换为对app-8de7016eef.js的引用,如清单文件中的映射所定义。 问题:如果命令在我的开发环境中运行,这将覆盖我的实际模板文件,留下一个脏的git树和不应该提交的更改。
  • gulp输出一个资产模板文件,该文件存储在未提交版本控制的public/html中,并根据它是否在prod / dev环境中运行包含正确的脚本标记(即{{1}在开发方面,<script src='js/app.js'>在prod。我的主模板可以<script src='js/app-8de7016eef.js'>,永远不需要被覆盖。问题:当有多个模板扩展时,这变得越来越复杂彼此,当在单独的块中存在需要被其他模板覆盖的CSS和JS时。从我的gulp任务生成和输出twig文件也会感到很麻烦。
  • 使用assetic来管理缓存清除:而不是使用@include 'public/html/assets.html.twig'我可以使用资产的gulp-rev语法,让我为我处理缓存清除。 问题:使用gulp的全部目的是摆脱资产,如果我必须同时使用gulp和assetic,那么复杂性就会增加。

那么有人解决了gulp和symfony问题的缓存破坏吗?你是怎么做到的?

1 个答案:

答案 0 :(得分:2)

您应该使用两个配置指令:

framework.templating.assets_version
framework.templating.assets_version_format

您可以在FrameworkBundle的 documentation 中详细了解它们。

他们使用常规{{ asset() }}功能,需要AsseticBundle。

然后只需转储一个参数/ config-file,它将你压缩的前端源文件夹的md5sum分配给git pre-commit钩子中的assets_version

<强>的.git /钩/预提交

#!/usr/bin/env sh

echo "framework.templating.assets_version: $(tar -cf - ./src/Frontend | md5sum)" \
> app/config/assets_version.yml

应用/配置/ config.yml

# ...
imports:
  # ...
  - { resource: './assets_version.yml' }