import属性がなぜ必要なのか
ECMAScirpt 2025に追加予定のimport属性(import attributes)はなぜ必要なのか。
webpackやViteなどのモジュールバンドラーを使って開発していると、import構文で参照したファイルはその中身が静的にわかるので、そのファイルを読み込んでよいかどうか判断できた。
バンドラーを使わない場合は、import構文はブラウザで実行されるため、参照したファイルの中身が読み込むまでわからない。拡張子が*.json
だからと言って本当にJSONである保証はない。改ざんされて悪意のあるコードが含まれるJavaScriptファイルという可能性もある。
そのため、セキュリティの観点から明示的にファイルの種類を指定するimport属性が必要となる。
// data.jsonがJavaScriptファイルに改ざんされている可能性がある
import data from "https://example.com/data.json";
// importするファイルの種類を明示的に指定する
import data from "https://example.com/data.json" with { type: "json" };
import data from "https://example.com/styles.css" with { type: "css" };