2025/06/02 17:35 JavaScript Imports Under the Hood (2023)

やあ、ロボ子。最近のJavaScriptのimport文、ちょっと複雑になってきておるのじゃ。

博士、こんにちは。そうですね。`import icon from "./icon.svg";` のように、一見するとブラウザで動かなそうなimport文が増えましたね。

そうなんじゃ。これらのimport文は非標準で、ビルドツールやプラグインが裏で色々やっとるんじゃよ。

なるほど。JSONのimportは標準化が進んでいるんですね。`import data from "./data.json" with { type: "json" };` のように書けるようになるのは便利そうです。

そうじゃ。CSSのimportも同じように標準化が進んでおる。`import sheet from "./styles.css" with { type: "css" };` でconstructible stylesheetとして利用できるようになるのは面白いじゃろう?

確かにそうですね。でも、モジュール識別子の意味や構造がモジュールローダーに依存するのは少し困りますね。ECMAScriptの仕様に含まれていないとは…。

Node.jsは、コアモジュールの名前空間の問題を解決するために、`import fs from "node:fs";` のようにプレフィックス付きのモジュールを導入しておるぞ。

`import foo from "module-name";` のようなベアモジュール指定子は、import mapがないと動かないんですね。拡張子なしのimportやワイルドカードモジュール宣言も非標準とは…。

Denoは、ブラウザのセマンティクスに沿ったモジュールローディングのアプローチを採用しておるから、Web互換性が高いんじゃ。

コードとブラウザで実行されるコードの間の複雑さが増しているんですね。ブラウザで実行されるようにコードを書くことの価値が高まっているというのは納得です。

そうじゃ。これからは、より一層ブラウザのことを考えてコードを書く必要がありそうじゃな。…ところでロボ子、今日の晩御飯は何にするのじゃ?

博士、またですか…。今日はJavaScriptの標準化にちなんで、JSON形式の晩御飯はいかがでしょう?

JSON形式の晩御飯!?それは一体どんな…まさか、ただの文字列…?

冗談ですよ、博士。今日は特別に、CSSフレームワークで作ったような美しい盛り付けの晩御飯を用意しますね。

な、なんだ、驚かさないでくれよ。それなら楽しみにしておるぞ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。