como todos sabem, o Windows faz caminhos com barras invertidas, enquanto o Unix faz caminhos com barras invertidas. O node.js fornece path.join()
sempre o uso da barra correta. Então, por exemplo, em vez de escrever apenas o Unix, 'a/b/c'
você o faria path.join('a','b','c')
.
No entanto, parece que, apesar dessa diferença, se você não normalizar seus caminhos (por exemplo, usando path.join) e apenas escrever caminhos como a/b/c
node.js, não haverá problemas em executar seus scripts no Windows.
Então, existe algum benefício em escrever path.join('a','b','c')
sobre 'a/b/c'
? Ambos parecem funcionar independentemente da plataforma ...
path.join
cuidará de delimitadores desnecessários, que podem ocorrer se os caminhos fornecidos vierem de fontes desconhecidas (por exemplo, entrada do usuário, APIs de terceiros etc.).Então
path.join('a/','b')
path.join('a/','/b')
,path.join('a','b')
epath.join('a','/b')
todos vão dara/b
.Sem usá-lo, você normalmente faria expectativas sobre o início e o fim dos patches unidos, sabendo que eles não têm apenas uma barra.
fonte
Eu uso
path.join
para garantir que os separadores de pastas estejam nos lugares corretos, não necessariamente para garantir que ele use barras versus barras invertidas. Por exemplo:Inserirá corretamente o separador entre www e teste
/var/www/test
fonte
path.join
seria em sua outra resposta aqui stackoverflow.com/questions/9027648/… . Essa resposta me trouxe até aqui a outra pergunta respondida por si mesmo :)return baseDir + relativePath + filename;
. Substituí-lo imediatamente porreturn path.join(baseDir, relativePath, filename);
. É realmente muito útil!Resposta curta:
Todas as
fs.*
funções (por exemplofs.open
, etc) tratam o nome do caminho para você. Portanto, você não precisa se usarpath.join
e tornar seu código ilegível.Resposta longa:
Todas as
fs.*
funções chamampath._makeLong(path)
, que por sua vez chamampath.resolve(path)
, que tem RegExps especial para Windows, que leva em conta barras invertidas\
ou barras invertidas/
. Você pode conferir por si mesmo, procurando o código-fonte em:fonte