import.meta
import.meta 元屬性將上下文特定的元資料暴露給 JavaScript 模組。它包含有關模組的資訊,例如模組的 URL。
語法
import.meta
值
import.meta 物件由宿主環境建立,是一個可擴充套件的null 原型物件,其中所有屬性都是可寫、可配置和可列舉的。規範沒有指定在其上定義任何屬性,但宿主通常會實現以下屬性:
描述
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 模組能夠透過 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 模組)
import fs from "node:fs/promises";
const fileURL = new URL("./someFile.txt", import.meta.url);
fs.readFile(fileURL, "utf8").then(console.log);
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # prod-ImportMeta |
瀏覽器相容性
載入中…