Symfony2では、assetic:dump
とassets:install
の違いは何ですか?これらの各コマンドはどのようなシナリオで、どの順序で使用する必要がありますか(順序が関連する場合)?
私は実際に 最近これについて書いた Symfony 2に基づいたOroCRMに関する記事で、さまざまなコマンドのコンテキスト/理由が必要な場合、それがおもしろいと思うかもしれません。
Symfonyアプリケーションにフロントエンドファイル(javascript、css、画像など)を含めるための2つの異なるシステムがあります。 assets:install
コマンドが最初に来ました。このコマンドは、アプリケーション内のすべてのSymfonyバンドルを検索して、
Resources/public
フォルダ。見つかった場合、assets:install
コマンドは、Resources/public
からweb/public/bundle/[bundle-name]
にファイルをコピーまたはシンボリックリンクします。これは、twig assets
関数で作成されたリンクがこれらのファイルを探す場所です。
<script src="{{ asset('js/script.js') }}" type="text/javascript"></script>
これになる
<script src="/bundles/[bundle-name]/js/script.js" type="text/javascript"></script>
これがassets
システムのすべてです。バンドルとともにフロントエンドファイルを保存できます。
assetic
システムは異なります。 assetic
を使用すると、このようなファイルにリンクできます。
{% javascripts '@AcmeFooBundle/Resources/public/js/foo.js' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
スタイルシートと画像にも同様のタグがあります。 assetic
を使用すると、anyバンドル内のファイルにリンクできます。 (@AcmeFooBundle
)。 Asseticでは、フォルダー内の複数のファイルにワイルドカードを使用してリンクすることもできます。
{% javascripts '@AcmeFooBundle/Resources/public/js/*' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
assetic
とのもう1つの違いは、生成されるリンクにあります。 dev
環境では、これらは次のようになります。
<script type="text/javascript" src="/app_dev.php/js/foo.js"></script>
<script type="text/javascript" src="/app_dev.php/js/bar.js"></script>
つまり、これらのファイルに対するリクエストは、assetic
バンドルで設定された特別なルートを介してPHPフロントコントローラー(app_dev.php
)]を介して実行されます。 dev
モードでは、アセットをダンプする必要はありません。それらは自動的に含まれます。また、ファイルにフィルターを適用することもできます。たとえば、次のように、プルされたファイルにcssrewrite
に。
{% stylesheets 'bundles/acme_foo/css/*' filter='cssrewrite' %}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
プログラムでフロントエンドアセットの出力をプログラムで変更したい場合は、assetic
を使用して、カスタムtwigフィルターを作成することでこれを実行できます。
ただし、これはパフォーマンスが集中します。運用環境では、PHPフロントコントローラーファイルを介して各ファイルを個別にリンクする代わりに、生成されるHTMLは次のようになります。
<script type="text/javascript" src="/js/as5s31l.js"></script>
as5s31l.js
はどこから来たのですか?それがassetic:dump
コマンドの機能です。それはすべての個々のjavascript/cssファイルを組み合わせ(フィルターを適用した後)、プロダクション用のナイスで静的なキャッシュ可能なファイルを作成します。
プロジェクトで特に指示がない限り、assets:install
およびassetic:dump
を常に実行する必要があります。これらのコマンドを使用するサードパーティバンドルがわからないためです。アプリケーションをprod
モードでデプロイまたは表示する前に、assetic:dump
を実行するだけです。順序は関係ありません。
バンドルが使用するシステムについては、上記を読んで、assetic
で何ができるかわからない場合は、assets
を使用してください。大丈夫です。