web-dev-qa-db-fra.com

Avez-vous besoin d’utiliser path.join dans node.js?

comme chacun le sait, Windows crée des chemins avec des barres obliques inverses, tandis qu'Unix fait des chemins avec des barres obliques. node.js fournit path.join() pour toujours utiliser la barre oblique correcte. Ainsi, par exemple, au lieu d'écrire uniquement Unix 'a/b/c', Vous feriez plutôt path.join('a','b','c').

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

Donc, y at-il un avantage à écrire path.join('a','b','c') à plus de 'a/b/c'? Les deux semblent fonctionner quelle que soit la plate-forme ...

126
balupton

Les systèmes de fichiers Windows n’ont aucun problème à utiliser des barres obliques inverses ou inverses comme séparateurs de chemin (c’est le cas depuis le passé sous DOS). Le seul problème réel est que les processeurs de ligne de commande Windows (ou, plus spécifiquement, 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 avez besoin d'un chemin d'accès inversé si vous devez passer un chemin d'accès à une commande Windows exécutée en tant que sous-processus. De plus, les appels d'API Windows (et les méthodes des langages de niveau supérieur qui appellent l'API Windows) qui renvoient les chemins utilisent des barres obliques inverses. Par conséquent, même si vous ne les transmettez pas à des sous-processus, vous devrez les normaliser.

98
ebohlman

path.join Prendra en charge les délimiteurs inutiles, susceptibles de se produire si les chemins donnés proviennent de sources inconnues (par exemple, entrée utilisateur, API tierces, etc.).

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

Sans l'utiliser, vous feriez généralement des attentes sur le début et la fin des chemins joints, sachant qu'ils ne possèdent aucun ou un seul slash.

87
dronus

J'utilise path.join pour vous assurer que les séparateurs de dossiers sont aux bons emplacements, mais pas nécessairement pour s’assurer qu’ils utilisent des barres obliques inverses. Par exemple:

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

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

45
Timothy Strimple

Réponse courte:

Toutes les fonctions fs.* (Par exemple. fs.open, Etc.) traitent le chemin d'accès pour vous. Donc, vous n'avez pas besoin d'utiliser path.join Vous-même et de rendre votre code illisible.

Longue réponse:

Toutes les fonctions fs.* Appellent path._makeLong(path), qui à son tour appelle path.resolve(path), qui possède des RegExps spéciaux pour Windows, qui prend en compte la barre oblique inverse \ Ou les barres obliques /. Vous pouvez vérifier par vous-même en regardant leur code source à l'adresse:

31
Rafael Xavier