web-dev-qa-db-ja.com

assetic:dumpとasset:installの違い

Symfony2では、assetic:dumpassets:installの違いは何ですか?これらの各コマンドはどのようなシナリオで、どの順序で使用する必要がありますか(順序が関連する場合)?

80
Richard Keller

私は実際に 最近これについて書いた 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を使用してください。大丈夫です。

134
Alan Storm