assetic : dump와 assets : install의 차이점


81

Symfony2에서의 차이 무엇 assetic:dumpassets: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.phpassetic번들의 특수 경로 설정을 통해 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.