ìë°ì€í¬ëŠœížì import.meta륌 íìíê³ , ëì ìì±ì ìŽì ì ë§ì¶° ê°ë°ìê° ë°íìì 몚ë ë©íë°ìŽí°ì ì ê·Œíì¬ ë€ìí ì í늬ìŒìŽì ì 구ííë ë°©ë²ì ììëŽ ëë€.
ìë°ì€í¬ëŠœíž import.meta ëì ìì±: ë°íì 몚ë ì 볎 ìŽíŽíêž°
ìë°ì€í¬ëŠœížì import.meta
ê°ì²Žë ë°íìì 몚ë í¹ì ë©íë°ìŽí°ì ì ê·Œíë íì€íë ë°©ë²ì ì ê³µí©ëë€. import.meta
ì첎ë ì ì ìŽì§ë§, ì¬êž°ì ì°ê²°ë ìì±ë€ì ëì ìŒ ì ììŽ í겜곌 컚í
ì€ížì ë°ëŒ 몚ëì ëìì ì¡°ì í ì ìë ê°ë ¥í êž°ë¥ì ì ê³µí©ëë€. ìŽ êžììë import.meta
ì ê·ž ëì ìì±ì ë³µì¡í ëŽì©ì ê¹ìŽ íê³ ë€ìŽ, íë ìë°ì€í¬ëŠœíž ê°ë°ììì ì¬ì© ì¬ë¡, ìŽì ë° ìí¥ì ëíŽ í구í©ëë€.
import.metaë 묎ììžê°?
ECMAScript 2020 ì¬ìì ìŒë¶ë¡ ëì
ë import.meta
ë íì¬ ìë°ì€í¬ëŠœíž ëªšëì ëí 컚í
ì€íž ë©íë°ìŽí°ë¥Œ í¬íšíë ê°ì²Žì
ëë€. ìŽë ì íµì ìž CommonJS 몚ëìŽ ìë ES 몚ëììë§ ì¬ì©í ì ììµëë€. import.meta
ì ê°ì¥ ìŒë°ì ìŽê³ ë늬 ì§ìëë ìì±ì 몚ëì ì ë URLì ëŽê³ ìë import.meta.url
ì
ëë€.
import.metaì 죌ì í¹ì§:
- ìœêž° ì ì©:
import.meta
ì첎ë ìœêž° ì ì© ê°ì²Žì ëë€.import.meta
ì ìë¡ìŽ ê°ì²Žë¥Œ í ë¹í ì ììµëë€. - 몚ë í¹ì : ê° ëªšëì ì ì¬ì ìŒë¡ ë€ë¥ž ìì±ê³Œ ê°ì ê°ì§ ê³ ì í
import.meta
ê°ì²Žë¥Œ ê°ì§ëë€. - ë°íì ì ê·Œ:
import.meta
ì ìì±ë€ì ë°íìì ì ê·Œí ì ììŽ, 몚ë ë©íë°ìŽí°ì êž°ë°í ëì ëìì ê°ë¥íê² í©ëë€. - ES 몚ë 컚í
ì€íž:
import.meta
ë ES 몚ë(import
ìexport
구묞ì ì¬ì©íë 몚ë) ëŽììë§ ì¬ì©í ì ììµëë€.
import.meta.url ìŽíŽíêž°
import.meta.url
ìì±ì 몚ëì ìì í íìžë URLì ëíëŽë 묞ììŽì ë°íí©ëë€. ìŽ URLì í겜ì ë°ëŒ íìŒ ê²œë¡(file:///
), HTTP URL(http://
ëë https://
) ëë ë€ë¥ž URL ì€íŽìŽ ë ì ììµëë€.
import.meta.urlì ìì:
- ëžëŒì°ì ìì: 몚ëìŽ ì¹ ìë²ìì ë¡ëë 겜ì°,
import.meta.url
ìhttps://example.com/js/my-module.js
ì ê°ì ì ììµëë€. - Node.jsìì: Node.jsìì ES 몚ë ì§ìì ì¬ì©íì¬ ëªšëì ì€íí ë(ì:
--experimental-modules
íëê·ž ì¬ì© ëëpackage.json
ì"type": "module"
ì€ì ),import.meta.url
ìfile:///path/to/my-module.js
ì ê°ì ì ììµëë€.
import.meta.urlì ì¬ì© ì¬ë¡:
- ìë ê²œë¡ íŽì:
import.meta.url
ì íë¡ì íž ëŽìì ìì°ìŽë ë€ë¥ž 몚ëì ëí ìë 겜ë¡ë¥Œ íŽìíë ë° ë§€ì° ì€ìí©ëë€. ìŽë¥Œ ì¬ì©íì¬ ì€í¬ëŠœížê° ì€íëë ìì¹ì êŽê³ììŽ ì ë 겜ë¡ë¥Œ 구ì±í ì ììµëë€. - ìì° ëì ë¡ë©: 몚ëì ìì¹ë¥Œ êž°ì€ìŒë¡ ìŽë¯žì§, ë°ìŽí° íìŒ ëë êž°í 늬ìì€ë¥Œ ë¡ëí©ëë€.
- 몚ë ìë³: 몚ë ìžì€íŽì€ë¥Œ ê³ ì íê² ìë³íë©°, í¹í ëë²ê¹ ìŽë ë¡ê¹ ìë늬ì€ìì ì ì©í©ëë€.
- ì€í í겜 ê²°ì : URL ì€íŽì êž°ë°ìŒë¡ í겜(ëžëŒì°ì , Node.js ë±)ì ì¶ë¡ í©ëë€. ì륌 ë€ìŽ, URLìŽ
'file:///'
ë¡ ììíëì§ íìží멎 Node.js í겜ìì ì ì ììµëë€.
ìì: ìì° ê²œë¡ íŽìíêž°
몚ë곌 ëìŒí ëë í 늬ì ìŽë¯žì§ê° ìë ìë늬ì€ë¥Œ ìê°íŽ ëŽ
ìë€. import.meta.url
ì ì¬ì©íì¬ ìŽë¯žì§ì ì ë 겜ë¡ë¥Œ 구ì±í ì ììµëë€:
// my-module.js
async function loadImage() {
const imageUrl = new URL('./images/my-image.png', import.meta.url).href;
const response = await fetch(imageUrl);
const blob = await response.blob();
const imageElement = document.createElement('img');
imageElement.src = URL.createObjectURL(blob);
document.body.appendChild(imageElement);
}
loadImage();
ìŽ ìì ìì new URL('./images/my-image.png', import.meta.url)
ì ìë¡ìŽ URL ê°ì²Žë¥Œ ìì±í©ëë€. 첫 ë²ì§ž ìžìë ìŽë¯žì§ì ìë 겜ë¡ìŽê³ , ë ë²ì§ž ìžìë êž°ì€ URL(import.meta.url
)ì
ëë€. ê·žë° ë€ì .href
ìì±ì ìŽë¯žì§ì ì ë URLì ì ê³µí©ëë€.
ëì ìì±: import.meta íì¥íêž°
import.meta.url
ìŽ ê°ì¥ ë늬 ì§ìëê³ íì€íë ìì±ìŽì§ë§, import.meta
ì ì§ì í íì ëì ìì±ì íµí íì¥ì±ì ììµëë€. ë¹ë ë구, ë²ë€ë¬ ë° ë°íì í겜ì import.meta
ì ì¬ì©ì ì ì ìì±ì ì¶ê°íì¬ ì€ì , í겜 ë³ì ë° êž°í 몚ëë³ ì 볎ì ëí ì ê·Œì ì ê³µí ì ììµëë€.
ëì ìì±ìŽ ì¶ê°ëë ë°©ì:
ëì ìì±ì ìŒë°ì ìŒë¡ ë¹ë 곌ì ìŽë 몚ëìŽ ì€íëë í겜ì ìíŽ ë°íìì ì¶ê°ë©ëë€. ìŽë¥Œ íµíŽ ë°°í¬ í겜ìŽë ë¹ë 구ì±ì í¹ì í ê°ì 죌ì í ì ììµëë€.
ëì ìì±ì ìì:
- í겜 ë³ì: 몚ëì 컚í ì€ížì í¹ì í í겜 ë³ìì ì ê·Œí©ëë€.
- ì€ì ë°ìŽí°: JSON íìŒìŽë ë€ë¥ž ì€ì ìì€ìì ì€ì ê°ì ê²ìí©ëë€.
- ë¹ë ì 볎: ë¹ë íìì€í¬íë ì í늬ìŒìŽì ì ë²ì ë²ížì ê°ì ë¹ë íë¡ìžì€ì ëí ì 볎륌 ì»ìµëë€.
- êž°ë¥ íëê·ž: í¹ì 몚ëì ëíŽ ìŽë€ êž°ë¥ìŽ íì±íëê±°ë ë¹íì±íëìëì§ ê²°ì í©ëë€.
ëì ìì±ì ì¬ì© ì¬ë¡
1. íê²œë³ ì€ì
í겜(ê°ë°, ì€í ìŽì§, íë¡ëì )ì ë°ëŒ ë€ë¥ž API ìëí¬ìžížì ì°ê²°íŽìŒ íë ì¹ ì í늬ìŒìŽì ì 구ì¶íë€ê³ ììíŽ ëŽ ìë€. ëì ìì±ì ì¬ì©íì¬ ë¹ë ìì ì ì¬ë°ë¥ž API URLì 몚ëì 죌ì í ì ììµëë€.
// config.js
export const apiUrl = import.meta.env.API_URL;
// my-module.js
import { apiUrl } from './config.js';
async function fetchData() {
const response = await fetch(`${apiUrl}/data`);
const data = await response.json();
return data;
}
ìŽ ìì ìì import.meta.env.API_URL
ì ë¹ë 곌ì ìì ì€ì ëë ëì ìì±ì
ëë€. API_URL
ì ê°ì ì í늬ìŒìŽì
ìŽ ë¹ëëë í겜ì ë°ëŒ ë¬ëŒì§ëë€.
ë¹ë ë구(Webpack)륌 ì¬ì©í 구í ìì:
// webpack.config.js
const { DefinePlugin } = require('webpack');
module.exports = {
// ...
plugins: [
new DefinePlugin({
'import.meta.env.API_URL': JSON.stringify(process.env.API_URL),
}),
],
};
ìŽ Webpack ì€ì ìì DefinePlugin
ì import.meta.env.API_URL
ìì±ì ì ìíë ë° ì¬ì©ë©ëë€. ê°ì process.env.API_URL
í겜 ë³ììì ê°ì žìµëë€. ë¹ë ì€ì Webpackì 몚ë import.meta.env.API_URL
ì í겜 ë³ìì ì€ì ê°ìŒë¡ ë첎í©ëë€.
2. êž°ë¥ íëê·ž
êž°ë¥ íë귞륌 ì¬ì©í멎 ìë¡ìŽ ìœë륌 ë°°í¬íì§ ìê³ ë ì í늬ìŒìŽì ì í¹ì êž°ë¥ì íì±ííê±°ë ë¹íì±íí ì ììµëë€. ëì ìì±ì ì¬ì©íì¬ êž°ë¥ íëê·ž ê°ì 몚ëì 죌ì í ì ììµëë€.
// feature-flags.js
export const isNewFeatureEnabled = import.meta.flags.NEW_FEATURE;
// my-module.js
import { isNewFeatureEnabled } from './feature-flags.js';
if (isNewFeatureEnabled) {
// Execute the new feature code
console.log('New feature is enabled!');
} else {
// Execute the old feature code
console.log('New feature is disabled.');
}
ì¬êž°ì import.meta.flags.NEW_FEATURE
ë ì êž°ë¥ìŽ íì±íëìëì§ ì¬ë¶ë¥Œ ëíëŽë ëì ìì±ì
ëë€. ìŽ ìì±ì ê°ì ì€ì íìŒìŽë í겜 ë³ìë¡ ì ìŽí ì ììµëë€.
ì€ì íìŒì ì¬ì©í 구í ìì:
// config.json
{
"features": {
"NEW_FEATURE": true
}
}
ë¹ë ë구ë ë°íì í겜ì ìŽ ì€ì íìŒì ìœê³ êž°ë¥ íëê·ž ê°ì import.meta
ì 죌ì
í ì ììµëë€. ì륌 ë€ìŽ, ë²ë€ë§ ì ì ì€íëë ì¬ì©ì ì ì ì€í¬ëŠœížê° íìŒì ìœê³ ì ì í Webpack DefinePlugin ë³ì륌 ì€ì í ì ììµëë€.
3. ë¹ë ìì ì 볎
ëì ìì±ì ë¹ë íìì€í¬í, Git ì»€ë° íŽì ëë ì í늬ìŒìŽì ë²ì ë²ížì ê°ì ë¹ë íë¡ìžì€ì ëí ì 볎ìë ì ê·Œí ì ìê² íŽì€ëë€. ìŽ ì 볎ë ëë²ê¹ ìŽë ë°°í¬ ì¶ì ì ì ì©í ì ììµëë€.
// build-info.js
export const buildTimestamp = import.meta.build.TIMESTAMP;
export const gitCommitHash = import.meta.build.GIT_COMMIT_HASH;
export const version = import.meta.build.VERSION;
// my-module.js
import { buildTimestamp, gitCommitHash, version } from './build-info.js';
console.log(`Build Timestamp: ${buildTimestamp}`);
console.log(`Git Commit Hash: ${gitCommitHash}`);
console.log(`Version: ${version}`);
ìŽ ìì ìì import.meta.build.TIMESTAMP
, import.meta.build.GIT_COMMIT_HASH
, import.meta.build.VERSION
ì ë¹ë 곌ì ìì ì€ì ëë ëì ìì±ì
ëë€. ë¹ë ëêµ¬ê° ìŽë¬í ê°ì 죌ì
íë ìí ì í©ëë€.
4. ëì 몚ë ë¡ë©
import()
륌 ì¬ì©í ëì ìí¬ížììë import.meta
ë ì¬ì í ì ì©í ì ììµëë€. ìë¡ ë€ë¥ž ìë°ì€í¬ëŠœíž ë°íì(ì: Node.jsì ëžëŒì°ì )ì©ìŒë¡ ìì±ëìì§ë§ ì ì¬í ë¡ì§ì ê³µì íë 몚ëìŽ ìë€ê³ ììíŽ ëŽ
ìë€. import.meta
륌 ì¬ì©íì¬ ë°íì í겜ì ê²°ì í ë€ì 조걎ë¶ë¡ ì¬ë°ë¥ž 몚ëì ë¡ëí ì ììµëë€.
// index.js
async function loadRuntimeSpecificModule() {
let modulePath;
if (import.meta.url.startsWith('file:///')) {
// Node.js environment
modulePath = './node-module.js';
} else {
// Browser environment
modulePath = './browser-module.js';
}
const module = await import(modulePath);
module.default(); // Assuming a default export
}
loadRuntimeSpecificModule();
ìŽ ìë늬ì€ìì ìœëë import.meta.url
ìŽ Node.js í겜ì ìŒë°ì ìž ì§íìž 'file:///'
ë¡ ììíëì§ íìží©ëë€. ìŽë¥Œ êž°ë°ìŒë¡ íŽë¹ ë°íìì ì í©í 몚ëì ëì ìŒë¡ ìí¬íží©ëë€.
ê³ ë €ì¬í ë° ëªšë² ì¬ë¡
1. ë¹ë ë구 ì졎ì±:
import.meta
ìì ëì ìì±ì ì¬ì©íë ê²ì ì¬ì© ì€ìž ë¹ë ë구ì í¬ê² ì졎í©ëë€. ê°êž° ë€ë¥ž ë²ë€ë¬(Webpack, Rollup, Parcel)ë import.meta
ì ê°ì 죌ì
íë ë°©ë²ìŽ ë€ëŠ
ëë€. í¹ì ì§ì¹šì ì¬ì© ì€ìž ë¹ë ë구ì 묞ì륌 ì°žì¡°íììì€.
2. ëª ëª ê·ì¹:
ì¶©ëì íŒíê³ ìœë ê°ë
ì±ì ëìŽêž° ìíŽ ëì ìì±ì ëí ëª
íí ëª
ëª
ê·ì¹ì ì€ì íììì€. ìŒë°ì ìž êŽíì import.meta.env
, import.meta.flags
ëë import.meta.build
ì ê°ì ë€ìì€íìŽì€ ìëì ìì±ì 귞룹ííë ê²ì
ëë€.
3. íì ìì ì±:
ëì ìì±ì ë¹ë ìì ì ì¶ê°ëë¯ë¡ ê°ë° ìì ìë íì ì 볎륌 ì¬ì©í ì ìì ì ììµëë€. íì ì€í¬ëŠœížë ë€ë¥ž íì ê²ì¬ ë구륌 ì¬ì©íì¬ ëì ìì±ì íì ì ì ìíê³ íì ìì ì±ì 볎ì¥íë ê²ì ê³ ë €íììì€.
// types/import-meta.d.ts
interface ImportMeta {
readonly url: string;
readonly env: {
API_URL: string;
};
readonly flags: {
NEW_FEATURE: boolean;
};
readonly build: {
TIMESTAMP: string;
GIT_COMMIT_HASH: string;
VERSION: string;
};
}
declare var importMeta: ImportMeta;
ìŽ íì
ì€í¬ëŠœíž ì ìž íìŒì import.meta
ì ì¶ê°ëë ëì ìì±ì íì
ì ì ìí©ëë€. ìŽ íìŒì íë¡ì ížì í¬íší멎 ëì ìì±ì ëí íì
ê²ì¬ ë° ìë ìì±ì ì»ì ì ììµëë€.
4. 볎ììì ìí¥:
믌ê°í ì 볎륌 import.meta
ì 죌ì
í ëì 볎ììì ìí¥ì ì ë
íììì€. ë¹ë°ìŽë ì격 ìŠëª
ì ìœëì ì§ì ì ì¥íì§ ë§ììì€. ëì í겜 ë³ìë ë€ë¥ž ìì í ì ì¥ ë©ì»€ëìŠì ì¬ì©íììì€.
5. 묞ìí:
íë¡ì ížìì ì¬ì©íë ëì ìì±ì 묞ìííììì€. ê° ìì±ìŽ ë¬Žìì ëíëŽëì§, ìŽë»ê² ì€ì ëëì§, ìŽë»ê² ì¬ì©ëëì§ ì€ëª íììì€. ìŽë ë€ë¥ž ê°ë°ìê° ìœë륌 ìŽíŽíê³ ë ìœê² ì ì§ë³Žìíë ë° ëììŽ ë ê²ì ëë€.
import.metaì ëì
import.meta
ê° ëªšë ë©íë°ìŽí°ì ì ê·Œíë íì€íëê³ ížëЬí ë°©ë²ì ì ê³µíì§ë§, í¹ì ì구ì¬í곌 íë¡ì íž ì€ì ì ë°ëŒ ê³ ë €í ì ìë ë€ë¥ž ì ê·Œ ë°©ìë ììµëë€.
1. í겜 ë³ì (Node.jsì process.env):
ì íµì ìž í겜 ë³ìë ì¬ì í ì í늬ìŒìŽì
ì ì€ì íë ìŒë°ì ìž ë°©ë²ì
ëë€. Node.jsììë process.env
륌 ì¬ì©íì¬ í겜 ë³ìì ì ê·Œí ì ììµëë€. ë늬 ì¬ì©ëì§ë§, ìŽ ì ê·Œ ë°©ìì 볞ì§ì ìŒë¡ 몚ëì êµíëì§ ììŒë©° ëª
ëª
ì¶©ëì íŒíêž° ìíŽ ì ì€í êŽëŠ¬ê° íìí©ëë€.
2. ì€ì íìŒ (JSON, YAML ë±):
ì€ì íìŒì ì í늬ìŒìŽì ì€ì ì ì ì¥íë ì ì°í ë°©ë²ì ì ê³µí©ëë€. ë°íìì ì€ì íìŒì ë¡ëíê³ íë¡ê·žëë° ë°©ììŒë¡ ì€ì ì ì ê·Œí ì ììµëë€. ê·žë¬ë ìŽ ì ê·Œ ë°©ìì ì€ì ë°ìŽí°ë¥Œ íì±íê³ êŽëЬíêž° ìí ì¶ê° ìœëê° íìí©ëë€.
3. ì¬ì©ì ì ì 몚ëë³ ì€ì ê°ì²Ž:
ê° ëªšëì í¹ì í ì¬ì©ì ì ì ì€ì ê°ì²Žë¥Œ ë§ë€ ì ììµëë€. ìŽ ê°ì²Žë€ì í겜 ë³ì, ì€ì íìŒ ì€ì ëë êž°í ë°ìŽí°ë¡ ì±ìì§ ì ììµëë€. ìŽ ì ê·Œ ë°©ìì ëì ìì€ì ì ìŽë¥Œ ì ê³µíì§ë§ ë ë§ì ìë ì€ì ë° ì ì§ë³Žìê° íìí©ëë€.
ê²°ë¡
ìë°ì€í¬ëŠœížì import.meta
ê°ì²Ž, í¹í ê·ž ëì ìì±ì ë°íìì 몚ë ë©íë°ìŽí°ì ì ê·Œí ì ìë ê°ë ¥í ë©ì»€ëìŠì ì ê³µí©ëë€. ëì ìì±ì íì©íšìŒë¡ìš ê°ë°ìë í겜, ì€ì ë° ë¹ë ì 볎ì ë°ëŒ 몚ëì ëìì ì¡°ì í ì ììµëë€. 구í ìžë¶ ì¬íì ë¹ë ë구ì ë°íì í겜ì ë°ëŒ ë€ë¥Œ ì ìì§ë§, Ʞ볞 ìì¹ì ëìŒí©ëë€. import.meta
ì êž°ë¥ê³Œ íê³ë¥Œ ìŽíŽíšìŒë¡ìš ë ì ì°íê³ ì ì§ë³Žì ê°ë¥íë©° ì ìì± ìë ìë°ì€í¬ëŠœíž ìœë륌 ìì±í ì ììµëë€.
ìë°ì€í¬ëŠœížê° ê³ì ë°ì íšì ë°ëŒ, import.meta
ì ê·ž ëì ìì±ì í¹í ë§ìŽí¬ë¡ìë¹ì€ì 몚ëì ìí€í
ì²ê° ë¶ìí멎ì íë ì í늬ìŒìŽì
ê°ë°ìì ì ì ë ì€ìí ìí ì í ê²ì
ëë€. ë°íì 몚ë ì 볎ì íì ë°ìë€ìŽê³ ìë°ì€í¬ëŠœíž íë¡ì ížìì ìë¡ìŽ ê°ë¥ì±ì ìŽìŽë³Žìžì.