アセット:ダンプとアセット:インストールの違い


81

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

回答:


137

私は最近、Symfony 2に基づくOroCRMに関する記事でこれについて実際に書いています。さまざまなコマンドのコンテキスト/理由が必要な場合は、興味深いと思うかもしれません。

Symfonyアプリケーションにフロントエンドファイル(javascript、css、imagesなど)を含めるための2つの異なるシステムがあります。assets:installコマンドは、最初に来ました。このコマンドは、アプリケーション内のすべてのSymfonyバンドルで

Resources/public

フォルダ。見つかった場合、assets:installコマンドはファイルをからResources/publicにコピーまたはシンボリックリンクしますweb/public/bundle/[bundle-name]。これは、twigassets関数で作成されたリンクがこれらのファイルを検索する場所です。この

<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内のファイルにリンクできることに注意してください。()。Asseticでは、ワイルドカードを使用してフォルダー内の複数のファイルにリンクすることもできます。@AcmeFooBundle

{% javascripts '@AcmeFooBundle/Resources/public/js/*' %}
    <script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}

とのもう1つの違いasseticは、生成されるリンクにあります。で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>

つまり、これらのファイルのリクエストapp_dev.phpは、asseticバンドルに設定された特別なルートを介してPHPフロントコントローラー()を介して実行されます。つまり、devモードになっているときは、アセットをダンプする必要はありません。それらは自動的に含まれます。また、ファイルにフィルターを適用することもできます。たとえば、次の例では、cssrewriteプルされたファイルにフィルターを適用します。

{% stylesheets 'bundles/acme_foo/css/*' filter='cssrewrite' %}
    <link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}

フロントエンドアセットの出力をプログラムで変更したいassetic場合は、カスタムの小枝フィルターを作成して変更 できます。

ただし、これはパフォーマンスを重視します。本番環境では、PHPフロントコントローラーファイルを介して各ファイルを個別にリンクする代わりに、生成されたHTMLは次のようになります。

<script type="text/javascript" src="/js/as5s31l.js"></script>

どこas5s31l.jsから来たの?それがassetic:dumpコマンドが行うことです。これは、組み合わせ(フィルタを適用した後に)すべての個々のjavascript / cssファイルを、生産のための素晴らしい、静的、キャッシュ可能なファイルを作成します。

するべきこと

プロジェクトで特に指示がない限り、これらのコマンドを使用しているサードパーティバンドルがわからないため、常にassets:installandを実行する必要がありassetic:dumpます。assetic:dumpアプリケーションをprodモードでデプロイまたは表示する前に実行する必要があるだけです。順序は関係ありません。

バンドルで使用するシステムについては、上記を読んで何asseticができるかわからない場合は、を使用してくださいassets。大丈夫です。


11
これは素晴らしい答えです、ありがとう。私はSymfonyのドキュメントのどこにも区別がなされていないと思います、そしてあなたの答えは物事を明確にします。
リチャードケラー

これを明確にしてくれてありがとう。あなたが言っ<script type="text/javascript" src="app_dev.php/js/as5s31l.js"></script> たところ、あなたは 実際に意味しました <script type="text/javascript" src="app.php/js/as5s31l.js"></script>
サムアンソニー

@Samおそらく-「/ js / as5s31l.js」を意味しているかもしれませんが--- Symfonyが何を生成するのか思い出せず、テストするアクティブなプロジェクトが手元にありません。
アランストーム

この回答もありがとうございます。ファイルがdevフロントコントローラーを介して個別に提供される場合、これは、dev envでscssファイルを処理するようにsassフィルターを設定できないことを意味しますか?
stphane 2016

@Stphane私はあなたが話している特定のフロントエンドツールチェーンに精通していませんが、このシステムの背後にある考え方は、SCSS処理を含むようにアセットを変更または拡張できるということです。
アランストーム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.