4

私はこれについて多くの情報を見つけることができませんでした。

私はすべてのcss(そして実際にはjs)ファイルを次のようなものにコンパイルしたいと思います:

css/all-c498dsfbc.css

現在、私はこれらを取得することしかできません:

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

最初のものは、キャッシュの無効化がまったくないため、最悪です。

2つ目は、キャッシュの無効化に使用できるハッシュを生成しますが、何らかの理由で、.cssファイルの何かを変更してから、これを再度実行しても変更されません。

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

ここで説明されているように、バージョンを手動で変更する必要があるため、3番目のものもひどいです: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

これは古いスレッドですが、Googleのトップにあるので、更新する価値があると思いました。

これで、キャッシュバスターワーカーを使用してアセットでこれを行うことができます。ただし、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 に答える