◆ module 内でしか使えないと思ってたから驚き

import をするには type="module" が必須だと思ってたけど つけ忘れてたのに動いたので驚いてます

<!DOCTYPE html>

<script>
import("https://unpkg.com/lit-html@2.3.0/lit-html.js").then(({ render, html }) => {
render(html`<p>loaded</p>`, root)
})
</script>

<div id="root"></div>

script タグには type を指定してないので従来のスクリプトのはずです
なのに import は動作して 画面には loaded の文字が表示されます

type="module" が出た頃からこんな動きでしたっけ?
IE が消えたので デフォルトが type="module" になったり?なんて思いもしたものの type="module" だと strict モードになるので既存サイトが動かなくなる可能性があるのでなさそうです
import を使ってるなら type="module" を想定してるコードのはずということで中身を見て自動判断でしょうか

試しに import.meta.url の表示もしてみました

<!DOCTYPE html>

<script>
import("https://unpkg.com/lit-html@2.3.0/lit-html.js").then(({ render, html }) => {
render(html`<p>loaded</p>`, root)
})
console.log(import.meta.url)
</script>

<div id="root"></div>

するとエラーが出ました

SyntaxError: Cannot use 'import.meta' outside a module

モジュールとしては扱われてないようです

whatwg の仕様を見に行ってみました
https://html.spec.whatwg.org/multipage/webappapis.html#integration-with-the-javascript-module-system

This syntax can be used inside both classic and module scripts. It thus provides a bridge into the module-script world, from the classic-script world.

import はクラシックスクリプトとモジュールスクリプトのどっちからでも使えるみたいです

いつからなのかはわかりませんでした
Github のソースコードでもあの量を 1 ファイルで管理してるようで 重いし変更数が多すぎるしで面倒なので諦めました
https://github.com/whatwg/html/blob/main/source