我有一个gulp构建流程用于我的Symfony2应用程序,并尝试集成缓存破坏,但遇到了障碍。我使用
我想到了一些解决方案,如下所述,但它们都不太好。是否有更好/正确的解决方案,或者为什么我应该选择我已经想到的方法之一的理由?
gulp-rev
将哈希附加到我的串联JavaScript文件并输出一个清单文件以映射原始文件名和哈希文件名。我目前有一个Twig模板,其中包含一个单一的脚本标记来导入所有正确构建的JavaScript文件,但我需要找到一种方法来更新该脚本标记,使其指向具有正确哈希的文件版本,确保每次哈希更改时下载新版本的文件。我想到了一些解决方案,如下所述,但它们都不太好。是否有更好/正确的解决方案,或者为什么我应该选择我已经想到的方法之一的理由?
- 使用
gulp-revreplace
将my_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,则复杂性会增加。
- { resource: '/path/to/assets_version.yml', ignore_errors: true }
,以便在assets_version.yml文件不存在时配置文件也能工作。 - lukeo05