[go: up one dir, main page]

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

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 のようなモジュールに関する情報が含まれています。

構文

js
import.meta

import.meta オブジェクトはホスト環境によって生成され、拡張可能な null プロトタイプオブジェクトとして、すべてのプロパティが書き込み可能、構成不可、列挙可能となります。仕様では定義すべきプロパティは指定されていませんが、ホストは通常次のプロパティを実装します。

url

モジュールの完全な URL。クエリーの引数やハッシュ(? または #)を含みます。ブラウザーでは、これはスクリプトが取得された URL (外部スクリプトの場合)か、包含文書の URL (インラインスクリプトの場合)のいずれかです。 Node.js では、これはファイルパス(file:// プロトコルを含む)です。

resolve

現在のモジュールの URL を基点として、モジュール指定子を URL に解決します。

解説

import.meta 構文は、キーワード import、ドット、識別子 meta で構成されます。 import は識別子ではなく予約語であるため、これはプロパティアクセサーではなく、特別な式構文です。

import.meta メタプロパティは JavaScript でモジュール内で利用できます。モジュール外(モジュール内の 直接 eval() を含む)で import.meta を使用すると構文エラーになります。

クエリー引数を渡す

import指定子で引数を指定することで、モジュール固有の引数渡しが可能になります。これは、アプリケーション全体の window.location (Node.js では process.argv 経由)から引数を取得する手法を補完するものです。例えば、以下の HTML では、

html
<script type="module">
  import "./index.mjs?someURLInfo=5";
</script>

index.mjs モジュールは、import.meta を通じて someURLInfo 引数を取得できます。

js
// index.mjs
new URL(import.meta.url).searchParams.get("someURLInfo"); // 5

ファイルが別のファイルをインポートする場合も同様です。

js
// 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):

js
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):

js
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

ブラウザーの互換性

関連情報