Skip to content

Attributs personnalisés sur les balises <script> et <link>

Des attributs personnalisés peuvent être ajoutés aux balises <script> et aux balises <link> de 3 manières différentes (par ordre de priorité) :

  • Depuis la configuration globale (script_attributes, link_attributes, preload_attributes, crossorigin) : voir dans la référence Vite bundle.

  • Dans les fonctions de rendu Twig : voir la documentation des Fonctions Twig.

  • En écoutant l'événement Pentatrion\ViteBundle\Event\RenderAssetTagEvent (code source).

Voici un exemple complet de configuration :

Attributs globaux

yaml
# config/packages/pentatrion_vite.yaml
pentatrion_vite:
    script_attributes:
        foo: bar

Attributs locaux

twig
{{ vite_entry_script_tags('app', {
  attr: {
    hello: 'world'
  }
}) }}

En écoutant l'événement RenderAssetTagEvent 🧩

php
// src/EventSubscriber/ScriptNonceSubscriber.php
namespace App\EventSubscriber;

use Pentatrion\ViteBundle\Event\RenderAssetTagEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class ScriptNonceSubscriber implements EventSubscriberInterface
{
    public function onRenderAssetTag(RenderAssetTagEvent $event)
    {
        $tag = $event->getTag();
        if ($tag->isInternal()) {
            return;
        }
        if ($tag->isScriptTag() && $event->isBuild()) {
            $tag->setAttribute('nonce', 'lookup nonce');
        }
        $tag->setAttribute('foo', 'bar-modified');

        // vous pouvez récupérer ici le nom du point d'entrée à l'origine
        $origin = $tag->getOrigin();

        // vous souhaitez désactiver l'en-tête HTTP de préchargement de tous
        // les scripts pour le point d'entrée app.
        if (
          $tag->getOrigin() === "app"
          && $tag->isPreload()
          && $tag->isRenderAsLinkHeader()
        ) {
          $tag->setRenderAsLinkHeader(false);
        }
    }


    public static function getSubscribedEvents()
    {
        return [
            RenderAssetTagEvent::class => 'onRenderAssetTag',
        ];
    }
}

Résultat

vous obtiendrez ceci :

html
<script
  type="module"
  src="/build/assets/app-dc399f15.js"
  foo="bar-modified"
  hello="world"
  nonce="lookup nonce"
></script>

Publié sous la licence MIT.