Pergunta

Não consegui encontrar muita informação sobre isso.

Quero compilar todos os arquivos css (e js, na verdade) em algo assim:

css/all-c498dsfbc.css

No momento só consigo obter estes:

css/all.css
css/c498dsfbc.css
css/all.css?v=123

O primeiro é uma droga, porque não tem nenhum impedimento de cache.

O segundo gera um hash que pode ser usado para impedir o cache, mas por algum motivo ele não muda quando eu altero algo em meus arquivos .css e executo novamente isto:

$ php app/console assetic:dump --env=prod --no-debug

O terceiro também é uma droga porque sou obrigado a alterar a versão manualmente, conforme explicado aqui: http://symfony.com/doc/current/reference/configuration/framework.html#ref-framework-assets-version.Além disso, não acho que usar consultas para isso seja uma boa ideia (acho que alguns navegadores ou CDN podem não gostar disso).Seria muito melhor se o nome do arquivo fosse alterado:'all-c498dsfbc.css'.É assim que é feito no Rails, se bem me lembro.

Alguma ideia?

EDITAR

Parece que esse recurso está faltando, não acredito: https://github.com/kriswallsmith/assetic/pull/190

Foi útil?

Solução

Em nosso projeto para garantir que o novo conteúdo não seja armazenado em cache pelo Varnish para cada implantação, alteramos manualmente a versão - e os ativos escolhem essa.Eu acho que é uma prática comum.Mas no nosso caso - ele salva em uma pasta como web/version-1.2.3/css/all.css.

Nossa configuração para framework seção:

    templating:
        engines: ['twig']
        assets_version: %release_version%
        assets_version_format: "version-%%2$s/%%1$s"

Outras dicas

Eu sei que este é um tópico antigo, mas está no topo do Google, então achei que valeria a pena atualizar:

Agora você pode fazer isso com ativos usando o trabalhador destruidor de cache.No entanto, o pacote de ativos 2.3.0 não tem a configuração para ele, então você precisa habilitá-lo manualmente por enquanto.Isso pode ser feito com a seguinte definição de serviço:

#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 }

Esta solução alternativa vem da solicitação pull para a configuração do cache buster trabalhador: https://github.com/symfony/AsseticBundle/pull/119/files

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top