HTML scriptタグとモジュール

コードが書いてあるファイルへの参照と、コードのインライン埋め込みが同じタグだったのは気にいらないが、それを言っても詮無いこと。

  • 参照なら: src 属性を付けて要素内容は空。
  • 埋め込みなら: src 属性を付けずに、要素内容に書く。

nomodule属性(存在がフラグになる)に関しては:

  • 参照なら: 属性が存在すれば、ESM対応環境で要素を無視する指定になる。
  • 埋め込みなら: 効果なし。srcがない場合は内容をパーズ/実行してしまう。

nomodule属性は参照専用だと思っておいたほうがよい。古いブラウザなら参照先をロードする。ESM対応ブラウザなら参照先を無視する。

ただし、type="module" は、コードの埋め込み時にも使える。埋め込まれたインライン・コードはモジュールコードとして評価されるので、専用のフレーム〈モジュールオブジェクト〉が準備されてそこでロード/実行される。トップレベル=グローバル空間で実行されるわけではない。