En Symfony2, ¿cuál es la diferencia entre assetic:dump
y assets:install
? ¿En qué escenarios debería usarse cada uno de estos comandos y en qué orden (si el orden es relevante)?
En Symfony2, ¿cuál es la diferencia entre assetic:dump
y assets:install
? ¿En qué escenarios debería usarse cada uno de estos comandos y en qué orden (si el orden es relevante)?
Respuestas:
De hecho, escribí sobre esto recientemente en un artículo sobre OroCRM, que está basado en Symfony 2. Si quieres algo del contexto / por qué de los diferentes comandos, puede que te resulte interesante.
Hay dos sistemas diferentes para incluir archivos frontend (javascript, css, imágenes, etc.) en una aplicación Symfony. El assets:install
comando vino primero. Este comando buscará todos los paquetes de Symfony en una aplicación para
Resources/public
carpeta. Si lo encuentra, el assets:install
comando copiará o vinculará archivos de Resources/public
a web/public/bundle/[bundle-name]
. Aquí es donde los enlaces creados con la assets
función twig buscarán estos archivos. Esta
<script src="{{ asset('js/script.js') }}" type="text/javascript"></script>
Se convierte en esto
<script src="/bundles/[bundle-name]/js/script.js" type="text/javascript"></script>
Eso es todo lo assets
que hace el sistema. Le permite almacenar sus archivos frontend con el paquete.
El assetic
sistema es diferente. Con assetic
, enlaza a archivos como este.
{% javascripts '@AcmeFooBundle/Resources/public/js/foo.js' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
Hay etiquetas similares para hojas de estilo e imágenes. Tenga en cuenta que le assetic
permite vincular archivos en cualquier paquete. ( @AcmeFooBundle
). Assetic también le permitirá vincular a varios archivos en una carpeta con un comodín.
{% javascripts '@AcmeFooBundle/Resources/public/js/*' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
Otra diferencia con assetic
está en los enlaces generados. En el dev
medio ambiente se verán así.
<script type="text/javascript" src="/app_dev.php/js/foo.js"></script>
<script type="text/javascript" src="/app_dev.php/js/bar.js"></script>
Es decir, las solicitudes de estos archivos se ejecutarán a través del controlador frontal de PHP ( app_dev.php
) a través de la configuración de rutas especiales en el assetic
paquete. Esto significa que, cuando está en dev
modo, nunca tendrá que deshacerse de sus activos. Se incluyen automáticamente. También le permite aplicar filtros a los archivos. Por ejemplo, lo siguiente aplica el cssrewrite
filtro a los archivos extraídos.
{% stylesheets 'bundles/acme_foo/css/*' filter='cssrewrite' %}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
Si alguna vez quisiste alterar programáticamente la salida de tus activos frontend, assetic
te permite hacerlo escribiendo filtros twig personalizados.
Sin embargo, esto requiere un alto rendimiento. En producción, en lugar de vincular cada archivo individualmente a través de un archivo de controlador frontal PHP, el HTML generado se verá así
<script type="text/javascript" src="/js/as5s31l.js"></script>
De donde as5s31l.js
viene Eso es lo que hace el assetic:dump
comando. Se combina todos los archivos javascript / css individuales (después de aplicar los filtros) y crea un bonito, estático, el archivo puede almacenar en caché para la producción.
A menos que el proyecto le indique específicamente lo contrario, siempre debe ejecutar assets:install
y assetic:dump
, porque nunca sabrá cuáles de sus paquetes de terceros utilizan estos comandos. Solo necesita ejecutar assetic:dump
antes de implementar o ver la aplicación en prod
modo. El orden es irrelevante.
En cuanto a qué sistema debe usar su paquete, si ha leído lo anterior y no está seguro de lo que assetic
puede hacer por usted, use assets
. Estarás bien.
<script type="text/javascript" src="app_dev.php/js/as5s31l.js"></script>
que realmente querías decir <script type="text/javascript" src="app.php/js/as5s31l.js"></script>