4

我找不到太多这方面的信息。

我想将所有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

4

2 回答 2

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"
于 2012-07-27T06:14:31.887 回答
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 }

此解决方法来自缓存破坏者工作器配置的拉取请求:https ://github.com/symfony/AsseticBundle/pull/119/files

于 2014-07-16T09:45:15.257 回答