assetic : dump와 assets : install의 차이점


81

Symfony2에서의 차이 무엇 assetic:dump과 assets:install? 이러한 각 명령은 어떤 시나리오에서 어떤 순서로 사용해야합니까 (순서가 관련된 경우)?

답변:


137

실제로 최근에 쓴 당신은 다른 명령으로, 귀하가 흥미있을 이유 문맥 /의 일부를 원하는 경우 심포니 2를 기반으로 OroCRM에 대한 기사에서.

Symfony 애플리케이션에 프런트 엔드 파일 (javascript, css, 이미지 등)을 포함하기위한 두 가지 시스템이 있습니다. 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에있는 파일에 대한 링크를 수 있는 번들. ( @AcmeFooBundle). Assetic을 사용하면 와일드 카드를 사용하여 폴더의 여러 파일에 연결할 수도 있습니다.

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

와 또 다른 차이점 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명령이하는 일입니다. 그것은 결합 (필터를 적용한 후) 모든 개별 자바 스크립트 / CSS 파일 및 생산을위한 좋은, 정적, 캐시 파일을 만듭니다.

해야 할 일

프로젝트에서 특별히 달리 지시하지 않는 한 항상 assets:install및을 실행해야 assetic:dump합니다. 이러한 명령을 사용하는 타사 번들을 알 수 없기 때문입니다. 모드 assetic:dump에서 애플리케이션을 배포하거나보기 전에 실행 하기 만하면 prod됩니다. 순서는 무관합니다.

번들에서 사용해야하는 시스템에 대해 설명합니다. 위의 내용을 읽었으며 어떤 assetic작업을 수행 할 수 있는지 확실하지 않은 경우 assets. 너는 괜찮아 질거다.


11
이것은 환상적인 대답입니다. 감사합니다. 나는 Symfony 문서의 어느 곳에서도 구별이 이루어지지 않는다고 생각하며 귀하의 답변은 상황을 명확하게합니다.
— Richard Keller 2014

이것을 명확히 해주셔서 감사합니다. 당신이 언급 어디 <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가 생성 한 것을 기억할 수없고 테스트 할 활성 프로젝트가 없습니다.
— Alan Storm

이 답변에 감사드립니다. 파일이 dev 프론트 컨트롤러에서 개별적으로 제공되는 경우 이는 dev env에서 scss 파일을 처리하기 위해 sass 필터를 설정할 수 없음을 의미합니까?
— Stphane

@Stphane 나는 당신이 말하는 특정 프론트 엔드 툴체인에 익숙하지 않지만이 시스템의이면에있는 아이디어는 자산이 SCSS 처리를 포함하도록 수정되거나 확장 될 수 있다는 것입니다.
— Alan Storm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.