import.meta
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2020年1月.
import.meta
オブジェクトはコンテキスト固有のメタデータを JavaScript のモジュールに公開します。これには、モジュールの URL のようなモジュールに関する情報が含まれています。
構文
import.meta
値
import.meta
オブジェクトはホスト環境によって生成され、拡張可能な null
プロトタイプオブジェクトとして、すべてのプロパティが書き込み可能、構成不可、列挙可能となります。仕様では定義すべきプロパティは指定されていませんが、ホストは通常次のプロパティを実装します。
解説
import.meta
構文は、キーワード import
、ドット、識別子 meta
で構成されます。 import
は識別子ではなく予約語であるため、これはプロパティアクセサーではなく、特別な式構文です。
import.meta
メタプロパティは JavaScript でモジュール内で利用できます。モジュール外(モジュール内の 直接 eval()
を含む)で import.meta
を使用すると構文エラーになります。
例
>クエリー引数を渡す
import
指定子で引数を指定することで、モジュール固有の引数渡しが可能になります。これは、アプリケーション全体の window.location
(Node.js では process.argv
経由)から引数を取得する手法を補完するものです。例えば、以下の HTML では、
<script type="module">
import "./index.mjs?someURLInfo=5";
</script>
index.mjs
モジュールは、import.meta
を通じて someURLInfo
引数を取得できます。
// index.mjs
new URL(import.meta.url).searchParams.get("someURLInfo"); // 5
ファイルが別のファイルをインポートする場合も同様です。
// index.mjs
import "./index2.mjs?someURLInfo=5";
// index2.mjs
new URL(import.meta.url).searchParams.get("someURLInfo"); // 5
Node.js の ES モジュール実装は、後者の例のようにクエリー引数(またはハッシュ)を含むモジュール指定子の解決に対応状況を示しています。ただし、 CLI コマンド(例えば node index.mjs?someURLInfo=5
)でモジュールを指定する場合、クエリーやハッシュは使用できません。 CLI のエントリーポイントは CommonJS に似た解決モードを採用しており、パスを URL ではなくファイルパスとして扱うためです。エントリポイントモジュールに引数を渡すには、同様に CLI 引数を使用し、 process.argv
を通じて読み取ってください(例: node index.mjs --someURLInfo=5
)。
現在のファイルからの相対パスによるファイルの解決
Node.js の CommonJS モジュールでは、現在のモジュールを含むフォルダー内の絶対パスを保持する __dirname
変数が存在し、相対パスの解決に有用です。一方、ESモジュールでは import.meta
を除きコンテキスト変数を使用することはできません。そのため、相対ファイルを解決するには import.meta.url
を使用することができます。これはファイルシステムパスではなく URL が使用されています。
使用前 (CommonJS):
const fs = require("fs/promises");
const path = require("path");
const filePath = path.join(__dirname, "someFile.txt");
fs.readFile(filePath, "utf8").then(console.log);
使用後 (ES modules):
import fs from "node:fs/promises";
const fileURL = new URL("./someFile.txt", import.meta.url);
fs.readFile(fileURL, "utf8").then(console.log);
仕様書
Specification |
---|
ECMAScript® 2026 Language Specification> # prod-ImportMeta> |
ブラウザーの互換性
Loading…