Je ne comprends pas clairement pourquoi l'attribut nomodule
existe dans les nouveaux navigateurs prenant en charge les modules ES6.
En HTML 5, l'attribut type
est facultatif et par défaut, text/javascript
:
L'attribut type donne la langue du script ou le format des données. Si l'attribut est présent, sa valeur doit être un type MIME valide. Le paramètre charset ne doit pas être spécifié. La valeur par défaut, utilisée si l'attribut est absent, est "text/javascript".
La valeur par défaut n'est pas <script type="module" src="module.js"></script>
. Ce défaut a-t-il changé? Si non, pourquoi nomodule
serait-il nécessaire? Puis-je simplement utiliser <script src="bundle.js"></script>
sans nomodule
?
Le but de de l'attribut nomodule
est de faire en sorte que les nouveaux navigateurs prenant en charge les scripts module ignorent un élément script
particulier:
L'attribut
nomodule
est un attribut booléen qui empêche l'exécution d'un script dans les agents utilisateurs prenant en charge les scripts de module.
La spécification a un bon exemple :
Cet exemple montre comment inclure un script de module pour les agents utilisateur modernes et un script classique pour les agents utilisateur plus anciens:
<script type="module" src="app.js"></script> <script nomodule src="classic-app-bundle.js"></script>
Dans les agents utilisateurs modernes qui prennent en charge les scripts de module, l'élément
script
avec l'attributnomodule
sera ignoré et l'élémentscript
avec le type "module
" sera récupéré et évalué (en tant que script de module). Inversement, les agents utilisateurs plus anciens ignoreront l'élémentscript
avec le type "module
", car il s'agit d'un type de script inconnu pour eux - mais ils n'auront aucun problème à extraire et à évaluer l'autre élémentscript
(en tant que script classique), car ils n'implémentez pas l'attributnomodule
.
C’est comme ça que ça fonctionne.
En HTML 5, l'attribut
type
est facultatif et sa valeur par défaut esttext/javascript
… Cette valeur par défaut at-elle changé?
La valeur par défaut n’a pas changé. Elle est toujours text/javascript
. Mais l'attribut type
peut maintenant aussi avoir la valeur module
, ce qui signifie que les navigateurs continuent à l'analyser et à l'exécuter en tant que text/javascript
— mais aussi spécifiquement en tant que script module .
Si non, pourquoi
nomodule
serait-il nécessaire?
C’est nécessaire afin d’empêcher les nouveaux navigateurs prenant en charge les scripts de module d’exécuter un script destiné uniquement aux anciens navigateurs qui ne prennent pas en charge les scripts de module, comme dans l’exemple ci-dessus.
Puis-je simplement utiliser
<script src="bundle.js"></script>
sansnomodule
?
Oui, si bundle.js
n’utilise pas de modules. S'il utilise des modules, vous voudriez y mettre type=module
(auquel cas les anciens navigateurs l'ignoreront car ils ne reconnaissent pas la valeur module
pour type
).
L'attribut nomodule est un attribut booléen utilisé pour indiquer à un navigateur qui ne supporte pas les modules qu'une certaine balise de script n'a pas besoin d'être chargée.
Le but de l'attribut nomodule est d'avoir un script backup pour les navigateurs plus anciens qui ne supportent pas le <script type="module">
et les ignoreront donc. L'ancien navigateur ne prenant en charge ni l'attribut <script type="module">
ni l'attribut nomodule, les scénarios suivants peuvent se produire:
Nouveaux navigateurs, supporte <script type="module">
& <script nomodule type="text/javascript">
<script type="module">
<script nomodule type="text/javascript">
. Les anciens navigateurs, ne [ne supportent pas <script type="module">
& <script nomodule type="text/javascript">
<script type="module">
car son implémentation ne peut pas le traiter. Aucun script ne sera téléchargé et exécuté.<script nomodule type="text/javascript">
.