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

3
我有一个gulp构建流程用于我的Symfony2应用程序,并尝试集成缓存破坏,但遇到了障碍。我使用gulp-rev将哈希附加到我的串联JavaScript文件并输出一个清单文件以映射原始文件名和哈希文件名。我目前有一个Twig模板,其中包含一个单一的脚本标记来导入所有正确构建的JavaScript文件,但我需要找到一种方法来更新该脚本标记,使其指向具有正确哈希的文件版本,确保每次哈希更改时下载新版本的文件。
我想到了一些解决方案,如下所述,但它们都不太好。是否有更好/正确的解决方案,或者为什么我应该选择我已经想到的方法之一的理由?
  • 使用gulp-revreplacemy_template.html.twig中对app.js的引用替换为映射文件中定义的app-8de7016eef.js的引用。问题:如果在我的开发环境中运行命令,则会覆盖我的实际模板文件,留下一个脏的git树和不应提交的更改。
  • 让gulp输出一个资产模板文件,存储在public/html中,不提交到版本控制,并根据是否在prod/dev环境中运行(即在开发环境上是<script src='js/app.js'>,在生产环境上是<script src='js/app-8de7016eef.js'>),包含正确的脚本标记。然后,我的主模板可以@include 'public/html/assets.html.twig',永远不需要被覆盖。问题:当有多个相互扩展的模板和需要被其他模板覆盖的单独块中的CSS和JS时,这变得越来越复杂。从我的gulp任务生成和输出Twig文件也感觉很混乱。
  • 使用assetic管理缓存破坏:我可以使用assetic的{% javascripts 'public/js/app.js' %} <script src="{{ asset_url }}"></script> {% endjavascripts %}语法而不是使用gulp-rev,并让它处理缓存破坏。问题:使用gulp的整个目的是摆脱assetic,如果我必须同时使用gulp和assetic,则复杂性会增加。
那么,有没有人解决了使用gulp和Symfony的缓存破坏问题?你是如何做到的?
1个回答

2
你应该使用两个配置指令:
```html

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

```
framework.templating.assets_version
framework.templating.assets_version_format

您可以在FrameworkBundle的文档中了解更多关于它们的信息。点击这里

它们可以与常规的{{ asset() }}函数一起使用,而且不需要AsseticBundle。

然后,在git pre-commit hook中转储一个参数/配置文件,将压缩的前端源文件夹的md5sum分配给assets_version

.git/hooks/pre-commit

#!/usr/bin/env sh

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

app/config/config.yml

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

谢谢,这个方法非常有效。我们的部署流程将生成assets_version.yml文件,而不是使用pre-commit hook。然后我简单地使用了- { resource: '/path/to/assets_version.yml', ignore_errors: true },以便在assets_version.yml文件不存在时配置文件也能工作。 - lukeo05

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接