Gibt es einen Unterschied zwischen den folgenden Aufrufen?
path.join(__dirname, 'app')
vs.
path.resolve(__dirname, 'app')
Welches sollte bevorzugt werden?
Gibt es einen Unterschied zwischen den folgenden Aufrufen?
path.join(__dirname, 'app')
vs.
path.resolve(__dirname, 'app')
Welches sollte bevorzugt werden?
Antworten:
Die beiden Funktionen behandeln Segmente, die /
auf sehr unterschiedliche Weise beginnen. join
verkettet es nur mit dem vorherigen Argument, resolve
behandelt es jedoch als Stammverzeichnis und ignoriert alle vorherigen Pfade - stellen Sie es sich als Ergebnis der Ausführung cd
mit jedem Argument vor:
path.join('/a', '/b') // Outputs '/a/b'
path.resolve('/a', '/b') // Outputs '/b'
Eine andere Sache zu beachten ist, dass path.resolve
immer eine absolute URL führt und Ihr Arbeitsverzeichnis als Basis verwendet, um diesen Pfad aufzulösen. Aber wie __dirname
es ein absoluter Weg ist, spielt dies in Ihrem Fall keine Rolle.
Welche Antwort Sie verwenden sollten, lautet: Es hängt davon ab, wie sich Segmente /
verhalten sollen - sollten sie einfach verbunden werden oder als neue Wurzel fungieren?
Wenn die anderen Argumente fest codiert sind, spielt es keine Rolle. In diesem Fall sollten Sie wahrscheinlich überlegen, (a) wie sich diese Zeile in Zukunft ändern könnte und (b) wie konsistent sie mit anderen Stellen im Code ist.
path.join('/a', '/b', 'c')
wird zurückkehren /a/b/c
, während path.resolve('/a', '/b', 'c')
wird zurückkehren /b/c
.
resolve
ist nicht der klarste, path.cd([starting dir], [final dir])
wäre viel intuitiver.
think of it as the result of executing cd with each argument
hat mich endlich dazu gebracht, es zu verstehen. Vielen Dank
Die Standardoperationen des Dateisystempfads variieren je nach Betriebssystem. Wir benötigen etwas, das es abstrahiert. Das path
Modul bietet Dienstprogramme oder APIs für die Arbeit mit Datei- und Verzeichnispfaden. Sie können es mit in Ihr Projekt aufnehmen
const path = require('path');
Das path.join
undpath.resolve
sind zwei verschiedene Methoden des Pfadmoduls.
Beide Methoden akzeptieren eine Folge von Pfaden oder Pfadsegmenten.
Die path.resolve()
Methode löst eine Folge von Pfaden oder Pfadsegmenten in einen absoluten Pfad auf .
Die path.join()
Methode verbindet alle angegebenen Pfadsegmente unter Verwendung des plattformspezifischen Trennzeichens als Trennzeichen und normalisiert dann den resultierenden Pfad.
Um Verhaltensweisen besser zu verstehen und zu unterscheiden, möchte ich dies anhand verschiedener Szenarien erläutern.
1. Wenn wir keine Argumente für eine leere Zeichenfolge angeben
In meinem Fall ist mein Dateiname index.js
und das aktuelle ArbeitsverzeichnisE:\MyFolder\Pjtz\node
const path = require('path');
console.log("path.join() : ", path.join());
// outputs .
console.log("path.resolve() : ", path.resolve());
// outputs current directory or equalent to __dirname of the node process
und beim laufenden Ergebnis ist wie unten
λ node index.js
path.join() : .
path.resolve() : E:\MyFolder\Pjtz\node
Die Schlussfolgerung aus dem obigen Experiment ist, dass die path.resolve()
Methode den absoluten Pfad als path.join()
Rückgabe ausgibt . Darstellen des aktuellen Arbeitsverzeichnisses oder des relativen Pfads, wenn nichts angegeben ist
2. Hinzufügen eines / path als eines der Argumente.
const path=require('path');
console.log("path.join() : " ,path.join('abc','/bcd'));
console.log("path.resolve() : ",path.resolve('abc','/bcd'));
und das Ergebnis ist
λ node index.js
path.join() : abc\bcd
path.resolve() : E:\bcd
Die Schlussfolgerung, die wir aus diesem Experiment ziehen können, besteht darin, dass path.join()
die Eingabeliste nur mit einem plattformspezifischen Trennzeichen verkettet wird, während die path.resolve()
Reihenfolge der Pfade von rechts nach links verarbeitet wird, wobei jedem nachfolgenden Pfad vorangestellt wird, bis ein absoluter Pfad erstellt wird.
path.join()
Verkettet jedes Argument mit betriebssystemspezifischen Trennzeichen, während path.resolve()
jedes Argument mit root aufgelöst und eine Ausgabe erzeugt wird.
path.resolve()
ist nicht gleichbedeutend mit __dirname
. Das erste gibt das Arbeitsverzeichnis zurück, während das zweite den Pfad zur aktuellen Datei darstellt.
const path = require('path'); console.log(path.resolve()) console.log(__dirname) console.log(path.resolve()===__dirname)
path.resolve() is equivalent to __dirname
1) path.resolve erstellt den absoluten Pfad.
Die Methode erstellt einen Absoulte-Pfad von rechts nach links bis ein absoluter Pfad erstellt wird.
Beispielsweise:
path.resolve('/a', 'b', 'c'); // C:\a\b\c
path.resolve('/a', '/b', 'c'); // C:\b\c
path.resolve('/a', '/b', '/c'); // C:\c
Wenn kein absoluter Pfad generiert wird, verwendet die Methode das aktuelle Arbeitsverzeichnis:
Beispielsweise:
path.resolve('a', 'b', 'c'); // C:\{current_working_directory}\a\b\c
2) path.join verbindet alle Pfade und normalisiert das Ergebnis
Beispielsweise:
path.join('/a', '/b', '/c'); // \a\b\c
path.join('/a', '/b', 'c'); // \a\b\c
path.join('/a', 'b', 'c'); // \a\b\c
path.join('a', 'b', 'c'); // \a\b\c
path.join('a','b','c')
sollte ergeben a\b\c
.