我已经为我的Symfony2应用程序准备了一个完整的构建过程,并且正在尝试集成缓存崩溃,但是遇到了一个障碍。我使用gulp-rev将散列附加到连接的javascript文件中,并输出一个清单文件,以映射原始文件名和散列文件名。我目前有一个小枝模板,它有一个脚本标记来导入所有正确构建的javascript文件,但是我需要找到一种方法来更新脚本标记,用正确的哈希来指向文件的版本,确保每次哈希更改时都会下载文件的新版本。
我想出了一些我在下面描述过的解决方案,但是没有一个感觉是对的。是否有人有一个更好的/正确的解决方案,或一些理由,为什么我应该采取我已经想到的方式之一。
gulp-revreplace将my_template.html.twig中对app.js的引用替换为对清单文件中映射定义的app-8de7016eef.js的引用。Problem:如果在我的dev环境中运行命令,这将覆盖实际的模板文件,给我留下一个肮脏的git树和不应该提交的更改。public/html中,没有提交到版本控制,并根据是否在prod/dev环境上运行(即<script src='js/app.js'>在dev上,<script src='js/app-8de7016eef.js'>在prod上)包含正确的脚本标记。这样,我的主模板就可以@include 'public/html/assets.html.twig'了,永远不需要被覆盖。Problem:当存在多个相互扩展的模板时,以及在需要被其他模板覆盖的单独块中同时存在CSS和JS时,这会变得越来越复杂。从我的吞咽任务中生成和输出一个小树枝文件也很麻烦。gulp-rev语法,而不是使用{% javascripts 'public/js/app.js' %} <script src="{{ asset_url }}"></script> {% endjavascripts %},让它为我处理缓存破坏。Problem:使用gulp的全部目的是摆脱assetic,如果我必须同时使用gulp和assetic,那么复杂性就会增加。那么有人用吞咽和塞弗尼的方法解决了破坏缓存的问题吗?你是怎么做到的?
发布于 2015-08-18 14:26:35
您应该使用两个配置指令:
framework.templating.assets_version
framework.templating.assets_version_format您可以在“文档 of the FrameworkBundle”中读到更多关于它们的内容。
它们使用常规的{{ asset() }}函数,不需要AsseticBundle。
然后,只需转储一个参数/config-文件,该文件在git预提交钩子中将压缩的前端源文件文件夹的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.ymlapp/config/config.yml
# ...
imports:
# ...
- { resource: './assets_version.yml' }https://stackoverflow.com/questions/32055965
复制相似问题