import.meta
import.meta
속성은 모듈의 메타 데이터를 JavaScript 모듈에 노출합니다. 여기에는 URL과 같은 모듈에 대한 정보가 포함됩니다.
구문
import.meta
값
import.meta
객체는 호스트 환경(브라우저 또는 Node.js 등)에서 모든 속성을 쓰기 가능하고(writable), 구성할 수 있으며(configurable), 열거할 수 있는(enumerable) 확장 가능한(extensible) null
-prototype 객체로 만들어집니다. 사양에는 이 객체에 정의할 속성이 명시되어 있지 않지만, 호스트는 일반적으로 다음과 같은 속성을 구현합니다:
설명
예제
쿼리 매개변수 전달
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 modules 구현은 두 번째 예시(index2.mjs
)와 같이 쿼리 매개변수(또는 해시)가 포함된 모듈 지정자 접근을 지원합니다.
그러나, Node.js의 CLI 명령(예: node index.mjs?someURLInfo=5
)을 통해 모듈을 지정한 경우 쿼리(?
) 또는 해시(#
)를 사용할 수 없습니다. CLI 엔트리포인트는 CommonJS와 유사한 모듈 해석을 사용하기 때문에 경로를 URL이 아닌 파일 경로로 취급하기 때문입니다. 엔트리포인트 모듈에 매개변수를 전달하려면 CLI 인수를 사용하고 대신 process.argv
를 통해 매개변수를 읽어야 합니다(예: node index.mjs --someURLInfo=5
).
현재 파일을 기준으로 파일 확인하기
Node.js CommonJS 모듈에는 현재 모듈이 포함된 폴더의 절대 경로를 포함하는 __dirname
변수가 있으며, 이는 상대 경로를 절대 경로로 치환하는 데 유용합니다. 그러나 ES modules은 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 Language Specification # prod-ImportMeta |
HTML Standard # hostgetimportmetaproperties |
브라우저 호환성
BCD tables only load in the browser