Ce face import.meta.dirname / filename
În CommonJS, fiecare fișier are variabilele __dirname și __filename. Modulele ES nu le au; în locul lor există import.meta.dirname (directorul în care se află fișierul) și import.meta.filename (calea completă, cu numele fișierului).
Ele nu depind de directorul din care pornești scriptul, spre deosebire de process.cwd(). Le folosești când un script are nevoie de fișiere aflate lângă el: șabloane, configurări, date.
import.meta.url există de mult și dă aceeași cale ca adresă file:///.... Înainte de dirname, se scria path.dirname(fileURLToPath(import.meta.url)); vei vedea această formă în cod mai vechi. Proprietățile există doar pentru module încărcate din fișiere (nu și pentru data: sau http:).
Ce returnează
Șiruri cu căi absolute.
Exemple
Exemplul 1: Un fișier lângă script
Calea este construită față de directorul scriptului, deci merge din orice director ai porni node.
import { writeFile, readFile } from "node:fs/promises";
import path from "node:path";
const fisierDate = path.join(import.meta.dirname, "stoc.json");
await writeFile(fisierDate, JSON.stringify({ mere: 40, pere: 25 }));
const stoc = JSON.parse(await readFile(fisierDate, "utf8"));
console.log(path.basename(fisierDate), stoc);
console.log(path.basename(import.meta.filename));
Rezultat
stoc.json { mere: 40, pere: 25 }
exemplu.mjs
Exemplul 2: Forma veche, cu import.meta.url
import { fileURLToPath } from "node:url";
import path from "node:path";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
console.log(import.meta.url.startsWith("file:///"));
console.log(__filename === import.meta.filename, __dirname === import.meta.dirname);
Rezultat
true
true true
Greșeli frecvente
- Folosești
new URL(import.meta.url).pathnameca să obții calea: pe Windows dă/C:/..., iar spațiile apar ca%20. Foloseșteimport.meta.dirnamesaufileURLToPath. - Confunzi
import.meta.dirnamecuprocess.cwd(): primul este locul fișierului, al doilea locul din care a fost pornit procesul.
Comenzi înrudite
process.cwd / process.chdir: Directorul curent de lucru al procesului, față de care se rezolvă căile relative. chdir îl schimbă.Module ES (import) și CommonJS (require): Cele două sisteme de module din Node.js: import/export (ES) și require/module.exports (CommonJS), și cum le combini.url.fileURLToPath / pathToFileURL: Transformă un URL file:// (cum este import.meta.url) în cale obișnuită și o cale în URL file://.path.join: Lipește mai multe bucăți într-o singură cale, cu separatorul corect pentru sistemul de operare, și curăță ./ și ../.