web-dev-qa-db-ja.com

デフォルトがtext / javascriptの場合、スクリプト要素のHTML「nomodule」属性の目的は何ですか?

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>だけを使用できますか?

27
dman

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を配置します(この場合、古いブラウザーはmoduletype値を認識しないため、それを無視します)。

58
sideshowbarker

nomodule属性

Nomodule属性は、特定のスクリプトタグを読み込む必要がないことをモジュールをサポートするブラウザーに示すために使用されるブール属性です

Nomodule属性の目的は、<script type="module">をサポートしていないためにそれらを無視する古いブラウザ用のbackupスクリプトを持つことです。古いブラウザは<script type="module">もnomodule属性もサポートしていないため、次のシナリオが発生する可能性があります。


新しいブラウザ<script type="module"><script nomodule type="text/javascript">をサポート

  • ブラウザは<script type="module">スクリプトをロードして実行できます
  • ブラウザはnomodule属性を認識し、<script nomodule type="text/javascript">をロードしません。

古いブラウザしない<script type="module"><script nomodule type="text/javascript">をサポートしない

  • ブラウザは<script type="module">を無視します。これは、その実装がこれを処理できないためです。スクリプトはダウンロードおよび実行されません。
  • ブラウザは<script nomodule type="text/javascript">スクリプトのダウンロードと実行を継続するため、nomodule属性を無視します。
4