web-dev-qa-db-fra.com

Différence entre path.normalize et path.resolve dans Node.js

Quelle est la différence (le cas échéant) entre path.normalize(your_path) et path.resolve(your_path)?

Je sais que path.resolve(...) peut accepter plusieurs arguments, mais le comportement avec un seul argument est-il identique à l'appel de path.normalize()?

EDIT: S'ils sont supposés se comporter de la même manière, je ne comprends pas le but d'exposer la fonction path.normalize(...) lorsque vous pouvez simplement passer le chemin dans path.resolve(...) Ou peut-être à des fins de documentation. Par exemple, ils disent dans la documentation de path.resolve(...):

... Le chemin résultant est normalisé, et ...

Exposer la path.normalize(...) facilite l'explication de ce que "normalisé" signifie ??? Je ne sais pas.

81
BMiner

path.normalize Supprime le surplus ., .., Etc. dans le chemin. path.resolve Résout un chemin en un chemin absolu. Exemple (mon répertoire de travail actuel était /Users/mtilley/src/testing):

> path.normalize('../../src/../src/node')
'../../src/node'
> path.resolve('../../src/../src/node')
'/Users/mtilley/src/node'

En d'autres termes, path.normalize Est "Quel est le chemin le plus court que je puisse emprunter pour me rendre au même endroit que l'entrée", tandis que path.resolve Est "Quelle est ma destination si je prends cette chemin."

Notez cependant que path.normalize() est beaucoup plus indépendant du contexte que path.resolve(). Si path.normalize() avait été contexte - de en suspens (c'est-à-dire s'il avait pris en compte le répertoire de travail en cours), le résultat dans l'exemple ci-dessus aurait été ../node, car c'est le chemin le plus court que l'on puisse prendre de /Users/mtilley/src/testing à /Users/mtilley/src/node.

Ironiquement, cela signifie que path.resolve() produit un chemin relatif en termes absolus (vous pouvez l'exécuter n'importe où et produirait le même résultat), alors que path.normalize() produit un chemin absolu en termes relatifs. (vous devez l'exécuter dans le chemin relatif pour lequel vous voulez calculer le résultat absolu).

174
Michelle Tilley

De la docs:

Une autre façon de penser à la résolution consiste à utiliser une séquence de commandes cd dans un shell.

Liens vers path.resolve et path.normalize dans la documentation. La plupart du temps, je ne souhaite pas simplement fournir des liens dans une réponse, mais la documentation de Node.js est très correcte.

2
Pickels