我找不到太多关于此的信息。
我想将所有css(和js确实)文件编译成这样的东西:
css/all-c498dsfbc.css
现在我只能得到这些:
css/all.css
css/c498dsfbc.css
css/all.css?v=123
第一个很糟糕,因为它根本没有缓存破坏。
第二个生成可用于缓存清除的哈希,但由于某种原因,当我在.css文件中更改某些内容然后再次运行时,它不会更改:
$ php app/console assetic:dump --env=prod --no-debug
第三个也很糟糕,因为我需要手动更改版本,如下所述:http://symfony.com/doc/current/reference/configuration/framework.html#ref-framework-assets-version。另外,我认为使用查询不是一个好主意(我认为某些浏览器或CDN可能不喜欢这样)。如果文件名被更改会更好:'all-c498dsfbc.css'。如果我没记错的话,这就是在Rails中完成的。
有什么想法吗?
修改
似乎缺少此功能,我无法相信:https://github.com/kriswallsmith/assetic/pull/190
答案 0 :(得分:6)
在我们的项目中,为了确保Varnish不为每个部署缓存新内容,我们手动更改版本 - 而资产选择那个。我认为,这是一种常见的做法。但在我们的情况下 - 它将其保存在web/version-1.2.3/css/all.css
。
framework
部分的配置:
templating:
engines: ['twig']
assets_version: %release_version%
assets_version_format: "version-%%2$s/%%1$s"
答案 1 :(得分:1)
我知道这是一个旧帖子,但它位于谷歌的顶端,所以我认为值得更新:
现在,您可以使用cache buster worker以资产方式执行此操作。但是2.3.0资产包没有配置,所以你现在需要手动启用它。这可以通过以下服务定义来完成:
#config.yml or a service.yml
#...
services:
assetic.worker.cache_buster:
class: Assetic\Factory\Worker\CacheBustingWorker
public: false
arguments:
lazy_manager: @assetic.asset_manager
tags:
worker_factory: { name: assetic.factory_worker }
这个解决方法来自对cache cacheter worker配置的pull请求:https://github.com/symfony/AsseticBundle/pull/119/files