import.meta
åºçº¿
广æ³å¯ç¨
èª 2020å¹´1æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
import.meta å
屿§å°ç¹å®ä¸ä¸æçå
æ°æ®æ´é²ç» JavaScript 模åãå®å
å«äºè¿ä¸ªæ¨¡åçä¿¡æ¯ï¼ä¾å¦è¿ä¸ªæ¨¡åç URLã
è¯æ³
import.meta
å¼
import.meta æ¯ä¸ä¸ªå®¿ä¸»ç¯å¢å建ç坿©å±ç null åå对象ï¼å
¶ææå±æ§åå¯åãå¯é
ç½®ã坿䏾ãè§è没æå¨å¯¹è±¡ä¸æç¡®å®ä¹ä»»ä½å±æ§ï¼ä½æ¯å®¿ä¸»ç¯å¢é常ä¼å®ä¹ä»¥ä¸å±æ§ï¼
url-
å°æ¤æ¨¡åç宿´ URLï¼å æ¬æ¥è¯¢åæ°åçæ®µæ è¯ç¬¦ï¼å¨
?å#ä¹åï¼ã卿µè§å¨ä¸ï¼å®æ¯å¯è·åæ¤èæ¬ç URLï¼å¯¹å¤é¨èæ¬ï¼æè æ¯å 嫿¤èæ¬çææ¡£ç URLï¼å¯¹å èèæ¬ï¼ãå¨ Node.js ä¸ï¼å®æ¯æä»¶è·¯å¾ï¼å æ¬file://åè®®é¨åï¼ã resolve-
å°ä¸ä¸ªæ¨¡åçæ è¯ç¬¦è§£æä¸ºç¸å¯¹äºå½å模åç URLã
æè¿°
import.meta è¯æ³ç±å
³é®å importãä¸ä¸ªç¹ç¬¦å·å meta æ è¯ç¬¦ç»æãå 为 import æ¯ä¿çåè䏿¯æ è¯ç¬¦ï¼å
¶å¹¶ä¸æ¯å±æ§è®¿é®å¨èæ¯ç¹æ®ç表达å¼è¯æ³ã
import.meta å
屿§å¨ JavaScript 模åä¸å¯ç¨ï¼å¨æ¨¡åä¹å¤ï¼å
æ¬å¨æ¨¡åä¸ç´æ¥è°ç¨ eval()ï¼ä½¿ç¨ import.meta æ¯è¯æ³é误ã
示ä¾
>ä¼ éæ¥è¯¢åæ°
å¨ import 声æä¸ä½¿ç¨æ¥è¯¢åæ°å
许为ç¹å®æ¨¡åä¼ éåæ°ï¼å¯ä½ä¸ºåºç¨ç¨åºå
ä» window.locationï¼æå¨ Node.js ä¸ä» process.envï¼è¯»ååæ°çè¡¥å
æ¹å¼ãä¾å¦ä¸é¢ç 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 模åçå®ç°æ¯æå¨è§£ææ¨¡åçæ è¯ç¬¦ä¸å«ææ¥è¯¢åæ°åçæ®µæ è¯ç¬¦ï¼å¦ä¸è¿°ç¤ºä¾æç¤ºãç¶èï¼ä»å½ä»¤è¡æå®æ¨¡åæ è¯ç¬¦æ¶æ æ³ä½¿ç¨æ¥è¯¢åæ°åçæ®µæ è¯ç¬¦ï¼ä¾å¦ node index.mjs?someURLInfo=5ï¼ï¼å 为å½ä»¤è¡çå
¥å£ç¹ä½¿ç¨äºç±»ä¼¼äº CommonJS çè§£ææ¨¡å¼ï¼å°æ´ä¸ªè·¯å¾è§ä¸ºæä»¶èé URLãè¦å°åæ°ä¼ éç»å
¥å£ç¹æ¨¡åï¼éè¦æ¹ç¨å½ä»¤è¡åæ°ï¼å¹¶ä» precess.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® 2027 Language Specification> # prod-ImportMeta> |