Die beiden Funktionen behandeln Segmente, die /auf sehr unterschiedliche Weise beginnen. joinverkettet es nur mit dem vorherigen Argument, resolvebehandelt es jedoch als Stammverzeichnis und ignoriert alle vorherigen Pfade - stellen Sie es sich als Ergebnis der Ausführung cdmit jedem Argument vor:
Eine andere Sache zu beachten ist, dass path.resolveimmer eine absolute URL führt und Ihr Arbeitsverzeichnis als Basis verwendet, um diesen Pfad aufzulösen. Aber wie __dirnamees 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.
Wenn Sie es immer noch nicht bekommen: path.join('/a', '/b', 'c')wird zurückkehren /a/b/c, während path.resolve('/a', '/b', 'c')wird zurückkehren /b/c.
Totymedli
28
Ich würde sagen, der Name resolveist nicht der klarste, path.cd([starting dir], [final dir])wäre viel intuitiver.
João Pimentel Ferreira
19
Das think of it as the result of executing cd with each argumenthat mich endlich dazu gebracht, es zu verstehen. Vielen Dank
André Pena
@ JoãoPimentelFerreira, ich habe die Antwort oben aktualisiert, da Sie einen gültigen Punkt gemacht haben. :)
Rin Minase
also path.resolve => Pfad unter Berücksichtigung des Arbeitsverzeichnisses als Ausgangspunkt des Pfads auflösen?
Webwoman
15
Die Standardoperationen des Dateisystempfads variieren je nach Betriebssystem. Wir benötigen etwas, das es abstrahiert. Das pathModul 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.joinundpath.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.jsund 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
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.
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.
Emile Bergeron
@EmileBergeron Nach meinem Verständnis sind beide Funktionen auf dem Weg. Sie können versuchen, dem folgenden Snippet zu folgen, um zu überprüfen, ob beide gleich sind, denke ich. const path = require('path'); console.log(path.resolve()) console.log(__dirname) console.log(path.resolve()===__dirname)
samuelj90
Sie sind nur dann identisch, wenn sich die ausgeführte Datei im aktuellen Arbeitsverzeichnis befindet.
Emile Bergeron
@ EmileBergeron Ok, dass ich zustimme. Aber ich bin immer noch verwirrt darüber, wo ich angegeben habepath.resolve() is equivalent to __dirname
samuelj90
1
@ EmileBergeron Ich hatte den Kommentar aktualisiert Ich denke, es wird die Verwirrung lösen
samuelj90
13
1) path.resolve erstellt den absoluten Pfad.
Die Methode erstellt einen Absoulte-Pfad von rechts nach links bis ein absoluter Pfad erstellt wird.
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ührungcd
mit jedem Argument vor: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.
quelle
path.join('/a', '/b', 'c')
wird zurückkehren/a/b/c
, währendpath.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 DankDie 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 aufnehmenDas
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
und beim laufenden Ergebnis ist wie unten
Die Schlussfolgerung aus dem obigen Experiment ist, dass die
path.resolve()
Methode den absoluten Pfad alspath.join()
Rückgabe ausgibt . Darstellen des aktuellen Arbeitsverzeichnisses oder des relativen Pfads, wenn nichts angegeben ist2. Hinzufügen eines / path als eines der Argumente.
und das Ergebnis ist
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 diepath.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ährendpath.resolve()
jedes Argument mit root aufgelöst und eine Ausgabe erzeugt wird.quelle
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:
Wenn kein absoluter Pfad generiert wird, verwendet die Methode das aktuelle Arbeitsverzeichnis:
Beispielsweise:
2) path.join verbindet alle Pfade und normalisiert das Ergebnis
Beispielsweise:
quelle
path.join('a','b','c')
sollte ergebena\b\c
.