nodejs node example node.js windows unix path

example - ¿Necesita usar path.join en node.js?



path nodejs (4)

Los sistemas de archivos de Windows no tienen problemas al usar barras inclinadas hacia delante o hacia atrás como separadores de ruta (este ha sido el caso desde los días de DOS). El único problema real es que los procesadores de línea de comandos de Windows (o, más específicamente, las utilidades de línea de comandos nativas de Windows) tienden a interpretar las barras inclinadas como especificadores de opciones en lugar de componentes de ruta. Por lo tanto, necesita una ruta de traza inversa si necesita pasar una ruta a un comando de Windows ejecutado como un subproceso. Además, las llamadas a la API de Windows (y los métodos de lenguajes de nivel superior que llaman a la API de Windows) que devuelven rutas usarán barras diagonales inversas, por lo que incluso si no las pasa a subprocesos, deberá normalizarlas.

como todo el mundo sabe, Windows hace rutas con barras diagonales inversas donde Unix hace rutas con barras diagonales. node.js proporciona path.join() para usar siempre la barra diagonal correcta. Así que, por ejemplo, en lugar de escribir el Unix solo ''a/b/c'' , harías path.join(''a'',''b'',''c'') lugar.

Sin embargo, parece que a pesar de esta diferencia, si no normalizas tus rutas (por ejemplo, usando path.join) y solo escribes rutas como a/b/c nodo a/b/c c.js no tiene problemas para ejecutar tus scripts en Windows.

Entonces, ¿hay algún beneficio sobre escribir path.join(''a'',''b'',''c'') sobre ''a/b/c'' ? Ambos parecen funcionar independientemente de la plataforma ...


Respuesta corta:

Todas las funciones de fs.* (Por ejemplo, fs.open , etc.) tratan la ruta por usted. Por lo tanto, no es necesario que utilice path.join usted mismo y que su código sea ilegible.

Respuesta larga:

Todas las funciones fs.* Llaman a path._makeLong(path) , que a su vez llama a path.resolve(path) , que tiene RegExps especial para Windows, que tiene en cuenta la barra invertida / o las barras diagonales / . Puede verificarlo usted mismo buscando su código fuente en:


Utilizo paths.join para asegurar que los separadores de carpetas estén en los lugares correctos, no necesariamente para asegurar que usa barras diagonales hacia adelante y hacia atrás. Por ejemplo:

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

Insertará correctamente el separador entre www y test /var/www/test


path.join se ocupará de los delimitadores path.join , que pueden ocurrir si los pathes dados provienen de fuentes desconocidas (por ejemplo, la entrada del usuario, API de terceros, etc.).

Entonces path.join(''a/'',''b'') path.join(''a/'',''/b'') , path.join(''a'',''b'') y path.join(''a'',''/b'') todos darán a/b .

Sin usarlo, generalmente se unirían las expectativas sobre el inicio y el final de los pathes, sabiendo que solo tienen una o una barra.