2017-09-26 2 views
0

Et en passant, foo et bar serait littéraux chaînepath.join (__ dirname, "toto", "bar") vs path.join (__ dirname, "foo/bar")

J'ai vu un grand nombre de référentiels qui utilisent à la fois, et "foo/bar""foo", "bar"

Je l'ai fait une référence avec benchmark js avec le code suivant (j'ai également fait un gist)

suite.add('foo/bar', function() { 
    path.join(__dirname, 'foo/bar') 
}) 
.add('foo, bar', function() { 
    path.join(__dirname, 'foo', 'bar') 
}) 
.on('complete', function() { 
    console.log('Fastest is ' + this.filter('fastest').map('name')); 
}) 
.run({ 'async': true }); 

et foo/bar était plus rapide. Mais je vois encore beaucoup de code comme path.join(__dirname, '..', '..', 'node_modules')

Y a-t-il une raison pour utiliser path.join(__dirname, 'foo', 'bar')?

Je parle aussi de path.resolve

Répondre

1

Il y a trois principaux avantages à l'utilisation path.join().

  1. Il vérifie automatiquement les séparateurs arrière de sorte que vous ne serez jamais deux séparateurs ensemble dans le chemin résultant.

  2. Il utilise automatiquement le séparateur de chemin spécifique à la plate-forme (qui est un antislash sous Windows). Après avoir joint les segments avec la logique ci-dessus, il normalise ensuite le chemin, en résolvant tous les segments . ou ...

Donc, vous utilisez path.join() sûr quand vous voulez tout de cette fonctionnalité. Si vous n'avez besoin d'aucune de ces fonctions, vous pouvez utiliser l'une ou l'autre méthode (avec votre propre construction manuelle ou utiliser path.join()).

+0

Donc, il est tout à fait correct d'utiliser quelque chose comme 'path.join (__ dirname," ../ chemin/vers/dir ")'? – ocboogie

+0

@ocboogie - Oui, c'est le cas. – jfriend00

+0

Pourquoi la downvote? Un peu difficile pour quiconque de savoir comment améliorer la réponse si vous faites juste un drive-by downvote sans explication. – jfriend00