ES6モジュールをサポートする新しいブラウザーにnomodule
属性が存在する理由を明確に理解していません。
HTML 5では、type
属性はオプションであり、 デフォルトはtext/javascript
:
Type属性は、スクリプトの言語またはデータの形式を提供します。属性が存在する場合、その値は有効なMIMEタイプでなければなりません。 charsetパラメーターは指定しないでください。デフォルトは、属性が存在しない場合に使用される「text/javascript」です。
デフォルトは<script type="module" src="module.js"></script>
ではありません。このデフォルトは変更されましたか?そうでない場合、なぜnomodule
が必要なのでしょうか? nomodule
なしで<script src="bundle.js"></script>
だけを使用できますか?
nomodule
属性の目的 は、 モジュールスクリプト をサポートする新しいブラウザーに特定のscript
要素を無視させることです。
nomodule
属性は、モジュールスクリプトをサポートするユーザーエージェントでスクリプトが実行されるのを防ぐブール属性です。
仕様 良い例があります :
この例は、最新のユーザーエージェント用のモジュールスクリプトと古いユーザーエージェント用のクラシックスクリプトを含める方法を示しています。
<script type="module" src="app.js"></script> <script nomodule src="classic-app-bundle.js"></script>
モジュールスクリプトをサポートする最近のユーザーエージェントでは、
script
属性を持つnomodule
要素は無視され、タイプが "script
であるmodule
要素(モジュールスクリプトとして)が取得および評価されます。逆に、古いユーザーエージェントは、タイプが「script
」のmodule
要素を無視します。これは、それが未知のスクリプトタイプであるためです。ただし、他のscript
要素(従来のスクリプトとして)、nomodule
属性を実装しないため。
それが仕組みです。
HTML 5では、
type
属性はオプションであり、デフォルトはtext/javascript
...です。このデフォルトは変更されましたか?
デフォルトは変更されていません-text/javascript
のままです。ただし、type
属性の値はmodule
にもなります。つまり、ブラウザーは引き続きtext/javascript
として解析し、実行しますが、具体的には モジュールスクリプト =。
そうでない場合、なぜ
nomodule
が必要なのでしょうか?
上記の例のように、モジュールスクリプトをサポートする新しいブラウザが、モジュールスクリプトをサポートしない古いブラウザ専用のスクリプトを実行するのを防ぐために必要です。
nomodule
なしで<script src="bundle.js"></script>
だけを使用できますか?
はい-bundle.js
がモジュールを使用しない場合。モジュールを使用する場合は、type=module
を配置します(この場合、古いブラウザーはmodule
のtype
値を認識しないため、それを無視します)。
Nomodule属性は、特定のスクリプトタグを読み込む必要がないことをモジュールをサポートするブラウザーに示すために使用されるブール属性です。
Nomodule属性の目的は、<script type="module">
をサポートしていないためにそれらを無視する古いブラウザ用のbackupスクリプトを持つことです。古いブラウザは<script type="module">
もnomodule属性もサポートしていないため、次のシナリオが発生する可能性があります。
新しいブラウザ、<script type="module">
&<script nomodule type="text/javascript">
をサポート
<script type="module">
スクリプトをロードして実行できます<script nomodule type="text/javascript">
をロードしません。古いブラウザ、しない<script type="module">
&<script nomodule type="text/javascript">
をサポートしない
<script type="module">
を無視します。これは、その実装がこれを処理できないためです。スクリプトはダウンロードおよび実行されません。<script nomodule type="text/javascript">
スクリプトのダウンロードと実行を継続するため、nomodule属性を無視します。