import.meta.dirname / filename în Node.js

Module și package.json Node.js 20.11 / 21.2 (stabil din 22.16 / 24.0)

Calea directorului și a fișierului modulului curent: înlocuitorii pentru __dirname și __filename în module ES.

Sintaxă
import.meta.dirname   // directorul fișierului curent
import.meta.filename  // calea completă a fișierului curent
import.meta.url       // același fișier, ca adresă file://

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).pathname ca să obții calea: pe Windows dă /C:/..., iar spațiile apar ca %20. Folosește import.meta.dirname sau fileURLToPath.
  • Confunzi import.meta.dirname cu process.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 ../.