import.meta
Базовая поддержка Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с мая 2018 года.
Мета-свойство import.meta предоставляет контекстно-зависимые метаданные JavaScript-модулю. Оно содержит информацию о модуле, например, URL-адрес модуля.
Синтаксис
import.meta
Значение
Объект import.meta создается хост-средой как расширяемый объект null-прототипа, в котором все свойства доступны для записи, настройки и перечисления. Спецификация не указывает, какие свойства должны быть на нём определены, но хосты обычно реализуют следующие свойства:
-
url - Полный URL-адрес модуля, включая параметры запроса и/или хеш (следуя
?или#). В браузерах это либо URL-адрес, с которого был получен скрипт (для внешних скриптов), либо URL-адрес содержащего его документа (для встроенных скриптов). В Node.js это путь к файлу (включая протоколfile://). -
resolve - Разрешает спецификатор модуля в URL, используя URL текущего модуля в качестве базы.
Описание
Синтаксис import.meta состоит из ключевого слова import, точки и идентификатора meta. Поскольку import является зарезервированным словом, а не идентификатором, это не акцессор свойства, а специальный синтаксис выражения.
Мета-свойство import.meta доступно в JavaScript-модулях; использование import.meta вне модуля (включая прямой eval() внутри модуля) является синтаксической ошибкой.
Примеры
Передача параметров запроса
Использование параметров запроса в спецификаторе import позволяет передавать аргументы, специфичные для модуля, что может дополнять чтение параметров из общеприкладного window.location (или в Node.js, через process.argv). Например, со следующим HTML:
<script type="module"> import "./index.mjs?someURLInfo=5"; </script>
Модуль index.mjs может получить параметр someURLInfo через import.meta:
// 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
Реализация ES-модулей в Node.js поддерживает разрешение спецификаторов модулей, содержащих параметры запроса (или хеш), как в последнем примере. Однако вы не можете использовать запросы или хеши, когда модуль указывается через команду CLI (например, node index.mjs?someURLInfo=5), потому что точка входа CLI использует режим разрешения, более похожий на CommonJS, обрабатывая путь как путь к файлу, а не как URL. Чтобы передать параметры модулю точки входа, используйте аргументы CLI и считывайте их через process.argv (например, node index.mjs --someURLInfo=5).
Разрешение файла относительно текущего
В модулях CommonJS Node.js существует переменная __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-модули):
import fs from "node:fs/promises";
const fileURL = new URL("./someFile.txt", import.meta.url);
fs.readFile(fileURL, "utf8").then(console.log);
Спецификации
Совместимость с браузерами
| Десктопные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
import_meta |
64 |
79 |
62 |
51 |
11.1 |
64 |
62 |
47 |
12 |
9.0 |
64 |
12 |
1.0.0 |
1.0 |
10.4.0 |
resolve |
105 |
105 |
106 |
91 |
16.4 |
105 |
106 |
72 |
16.4 |
20.0 |
105 |
16.4 |
1.0.0 |
1.24 |
20.8.0
20.6.0–20.8.0Возвращает объектURL вместо строки.18.19.0–19.0.0
|
Смотрите также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import.meta