126 votes

Faut-il utiliser path.join dans node.js ?

Comme tout le monde le sait, Windows utilise les barres obliques inverses pour les chemins, alors qu'Unix utilise les barres obliques inverses pour les chemins. path.join() pour toujours utiliser la bonne barre oblique. Ainsi, par exemple, au lieu d'écrire la commande Unix seulement 'a/b/c' vous feriez path.join('a','b','c') à la place.

Cependant, il semble que malgré cette différence, si vous ne normalisez pas vos chemins (par exemple en utilisant path.join) et que vous écrivez simplement des chemins tels que a/b/c node.js n'a aucun problème à exécuter vos scripts sous Windows.

Alors, y a-t-il un avantage à écrire path.join('a','b','c') sur 'a/b/c' ? Les deux semblent fonctionner quelle que soit la plateforme...

98voto

ebohlman Points 6938

Les systèmes de fichiers Windows n'ont aucun problème à utiliser les barres obliques avant ou arrière comme séparateurs de chemin (c'est le cas depuis l'époque du DOS). Le seul véritable problème est que les processeurs de ligne de commande Windows (ou, plus précisément, les utilitaires de ligne de commande natifs de Windows) ont tendance à interpréter les barres obliques comme des spécificateurs d'option plutôt que comme des composants de chemin. Par conséquent, vous devez utiliser un chemin avec barre oblique inversée si vous devez transmettre un chemin à une commande Windows exécutée en tant que sous-processus. De plus, les appels de l'API Windows (et les méthodes des langages de niveau supérieur qui appellent l'API Windows) qui renvoient des chemins d'accès utiliseront des barres obliques inversées, donc même si vous ne les passez pas aux sous-processus, vous devrez les normaliser.

89voto

dronus Points 1925

path.join s'occupera des délimiteurs inutiles, qui peuvent se produire si les chemins donnés proviennent de sources inconnues (par exemple, entrée utilisateur, API tierces, etc.).

Alors path.join('a/','b') path.join('a/','/b') , path.join('a','b') et path.join('a','/b') donneront tous a/b .

Sans l'utiliser, on s'attend généralement à ce que le début et la fin des chemins joints soient connus, sachant qu'ils ne comportent qu'une seule barre oblique ou aucune.

49voto

Timothy Strimple Points 7583

J'utilise path.join pour s'assurer que les séparateurs de dossiers sont placés aux bons endroits, et pas nécessairement pour s'assurer qu'il utilise des barres obliques avant et arrière. Par exemple :

path.join("/var/www", "test")

insérera correctement le séparateur entre www et test /var/www/test

32voto

Rafael Xavier Points 656

Réponse courte :

Tous fs.* fonctions (ex. fs.open etc) traite le nom du chemin pour vous. Ainsi, vous n'avez pas besoin d'utiliser path.join et rendre votre code illisible.

Longue réponse :

Tous fs.* fonctions d'appel path._makeLong(path) qui, à son tour, appelle path.resolve(path) qui possède des RegExps spéciales pour Windows, qui prennent en compte les backslashs \ ou des barres obliques / . Vous pouvez le vérifier par vous-même en regardant leur code source à l'adresse suivante :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X