gstreamer0.10-ffmpeg
gstreamer0.10-plugins-good
packages.
Ya sabemos que podemos ejecutar JavaScript moderno directamente en nuestro navegador. Pero para facilitar el proceso, vamos a instalar un nuevo componente de Symfony llamado AssetMapper.
Busca tu terminal y ejecuta:
composer require symfony/asset-mapper symfony/asset
Incluyo el segundo paquete porque nos proporciona esa bonita función asset()
en Twig. Ya está instalado en este proyecto - asegúrate de que lo tienes en el tuyo.
Antes de empezar: AssetMapper es experimental en Symfony 6.3, por lo que es probable que haya algunas interrupciones de retrocompatibilidad antes de la 6.4. Pero como veremos, los conceptos son sólidos, y puedes desplegar un sitio super-performante con AssetMapper hoy mismo.
Ejecuta:
git status
Oooh: la receta Flex para AssetMapper ha añadido varias cosas. En primer lugar, nos ha proporcionado un directorio assets/
... que es prácticamente idéntico al que tendrías si instalaras WebpackEncore. Tenemos un archivo app.js
-este será el principal, el que se ejecute- y también app.css
: el archivo CSS principal.
/* | |
* Welcome to your app's main JavaScript file! | |
* | |
* This file will be included onto the page via the importmap() Twig function, | |
* which should already be in your base.html.twig. | |
*/ | |
console.log('This log comes from assets/app.js - welcome to AssetMapper! 🎉') |
body { | |
background-color: skyblue; | |
} |
En templates/base.html.twig
, la receta también añadió una etiqueta link
para apuntar aapp.css
. Hablaremos más sobre hojas de estilo más adelante, pero ya puedes ver que la configuración CSS es perfectamente sencilla.
... lines 1 - 2 | |
<head> | |
... lines 4 - 11 | |
{% block stylesheets %} | |
<link rel="stylesheet" href="{{ asset('styles/app.css') }}"> | |
{% endblock %} | |
... line 15 | |
{% block javascripts %} | |
{{ importmap() }} | |
... line 18 | |
{% endblock %} | |
</head> | |
... lines 21 - 70 |
La receta añadió otra línea importante a este archivo: {{ importmap() }}
. Que se asocia con un nuevo archivo importmap.php
. Estos son importantes, y entraremos en detalle sobre ellos en breve.
Las conclusiones son que la receta creó unos cuantos archivos en assets/
y añadió una etiquetalink
a base.html.twig
. Pero por lo demás, aún no ha pasado gran cosa.
Volviendo al terminal, la receta también ha creado un nuevo archivo asset_mapper.yaml
. Abrámoslo: config/packages/asset_mapper.yaml
.
framework: | |
asset_mapper: | |
# The paths to make available to the asset mapper. | |
paths: | |
- assets/ |
AssetMapper tiene un concepto principal: lo apuntas a un directorio o conjunto de directorios, como assets/
, y hace que todos los archivos de su interior estén disponibles públicamente, como si vivieran en el directorio public/
. Veremos cómo se consigue en un minuto.
Pero antes de hacer nada, actualiza la página y... ¡el fondo se ha vuelto azul! Eso viene del archivo app.css
. Y, en el registro de la consola, vemos un mensaje que procede de assets/app.js
. Así que, de algún modo, mágicamente, sólo con ejecutar un comandocomposer require
, estos dos archivos ya están expuestos públicamente y se están cargando en la página. A continuación, vamos a ver cómo funciona todo esto.
"Houston: no signs of life"
Start the conversation!
// composer.json
{
"require": {
"php": ">=8.1",
"ext-ctype": "*",
"ext-iconv": "*",
"babdev/pagerfanta-bundle": "^4.0", // v4.2.0
"doctrine/doctrine-bundle": "^2.7", // 2.10.0
"doctrine/doctrine-migrations-bundle": "^3.2", // 3.2.4
"doctrine/orm": "^2.12", // 2.15.2
"knplabs/knp-time-bundle": "^1.18", // v1.20.0
"pagerfanta/doctrine-orm-adapter": "^4.0", // v4.1.0
"pagerfanta/twig": "^4.0", // v4.1.0
"stof/doctrine-extensions-bundle": "^1.7", // v1.7.1
"symfony/asset": "6.3.*", // v6.3.0
"symfony/asset-mapper": "6.3.*", // v6.3.0
"symfony/console": "6.3.*", // v6.3.0
"symfony/dotenv": "6.3.*", // v6.3.0
"symfony/flex": "^2", // v2.3.1
"symfony/framework-bundle": "6.3.*", // v6.3.0
"symfony/http-client": "6.3.*", // v6.3.0
"symfony/monolog-bundle": "^3.0", // v3.8.0
"symfony/proxy-manager-bridge": "6.3.*", // v6.3.0
"symfony/runtime": "6.3.*", // v6.3.0
"symfony/stimulus-bundle": "^2.9", // v2.9.1
"symfony/twig-bundle": "6.3.*", // v6.3.0
"symfony/ux-turbo": "^2.9", // v2.9.1
"symfony/web-link": "6.3.*", // v6.3.0
"symfony/yaml": "6.3.*", // v6.3.0
"twig/extra-bundle": "^2.12|^3.0", // v3.6.1
"twig/twig": "^2.12|^3.0" // v3.6.1
},
"require-dev": {
"doctrine/doctrine-fixtures-bundle": "^3.4", // 3.4.4
"symfony/debug-bundle": "6.3.*", // v6.3.0
"symfony/maker-bundle": "^1.41", // v1.49.0
"symfony/stopwatch": "6.3.*", // v6.3.0
"symfony/web-profiler-bundle": "6.3.*", // v6.3.0
"zenstruck/foundry": "^1.21" // v1.33.0
}
}