Was ist der Unterschied zwischen process.cwd () und __dirname?


302

Was ist der Unterschied zwischen

console.log(process.cwd())

und

console.log(__dirname);

Ich habe beide in ähnlichen Kontexten verwendet gesehen.

Antworten:


486

process.cwd() gibt das aktuelle Arbeitsverzeichnis zurück,

dh das Verzeichnis, aus dem Sie den nodeBefehl aufgerufen haben .

__dirname Gibt den Verzeichnisnamen des Verzeichnisses zurück, das die JavaScript-Quellcodedatei enthält


5
Bedeutet dies, dass dies für alle Fälle außer für process.cwd()synonym ist ? .require()
Alexander Gonchiy

10
@AlexanderGonchiy korrekt, .ist relativ zu process.cwd()(also auch), außer dass require()dies relativ zur aktuell ausgeführten Datei funktioniert. Weitere Informationen finden Sie hier .
Dwelle

1
Beachten Sie, dass das aktuelle Arbeitsverzeichnis zur Laufzeit mit process.chdir geändert werden kann, sodass es nicht immer das Verzeichnis ist, von dem aus der Knoten aufgerufen wurde.
masterxilo

84

Gemäß Knoten js doc process.cwd()

cwdist eine Methode für ein globales Objekt processund gibt einen Zeichenfolgenwert zurück, der das aktuelle Arbeitsverzeichnis des Node.js-Prozesses ist.

Gemäß Knoten js doc __dirname

Der Verzeichnisname des aktuellen Skripts als Zeichenfolgenwert. __dirname ist eigentlich kein globaler, sondern ein lokaler Name für jedes Modul.

Lassen Sie mich mit Beispiel erklären,

Angenommen, wir haben eine main.jsDatei im Inneren C:/Project/main.js und node main.jsbeide Werte geben dieselbe Datei zurück

oder einfach mit folgender Ordnerstruktur

Project 
├── main.js
└──lib
   └── script.js

main.js

console.log(process.cwd())
// C:\Project
console.log(__dirname)
// C:\Project
console.log(__dirname===process.cwd())
// true

Angenommen, wir haben andere script.jsDateidateien in einem Unterverzeichnis des Projekts, dh C:/Project/lib/script.jsund laufen, node main.jsdie erfordernscript.js

main.js

require('./lib/script.js')
console.log(process.cwd())
// C:\Project
console.log(__dirname)
// C:\Project
console.log(__dirname===process.cwd())
// true

script.js

console.log(process.cwd())
// C:\Project
console.log(__dirname)
// C:\Project\lib
console.log(__dirname===process.cwd())
// false

9

Wenn Sie den Umfang der einzelnen Elemente kennen, können Sie sich leichter daran erinnern.

processist nodedas globale Objekt von .cwd()is und gibt zurück, wo der Knoten ausgeführt wird.

__dirnameist moduledie Eigenschaft von is und repräsentiert den Dateipfad des Moduls. Im Knoten befindet sich ein Modul in einer Datei.

Ebenso __filenameist moduledie Eigenschaft eines anderen, die den Dateinamen des Moduls enthält.


0

$ find proj

proj
proj/src
proj/src/index.js

$ cat proj/src/index.js

console.log("process.cwd() = " + process.cwd());
console.log("__dirname = " + __dirname);

$ cd proj; node src/index.js

process.cwd() = /tmp/proj
__dirname = /tmp/proj/src
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.