Подтвердить что ты не робот

Вам нужно использовать path.join в Node.js?

поскольку все знают, что Windows делает пути с обратными косыми чертами, где unix делает пути с прямыми косыми чертами. Node.js обеспечивает path.join(), чтобы всегда использовать правильную косую черту. Так, например, вместо написания unix только 'a/b/c' вместо этого вы бы сделали path.join('a','b','c').

Однако, кажется, что, несмотря на эту разницу, если вы не нормализуете свои пути (например, с помощью path.join) и просто пишите пути, такие как a/b/c Node.js не имеет проблем с запуском ваших скриптов в Windows...

Итак, есть ли преимущество над написанием path.join('a','b','c') над 'a/b/c'? поскольку оба они работают независимо от платформы...

4b9b3361

Ответ 1

В файловых системах Windows нет проблем с использованием либо переадресации, либо обратной косой черты в качестве разделителей путей (это было так, как в дни DOS). Единственная реальная проблема заключается в том, что процессоры командной строки Windows (или, более конкретно, утилит командной строки для Windows) имеют тенденцию интерпретировать косые черты в качестве спецификаторов опций, а не компонентов пути. Поэтому вам нужен обратный путь, если вам нужно передать путь к командной строке Windows как подпроцесс. Кроме того, вызовы Windows API (и методы на языках более высокого уровня, которые вызывают Windows API), которые возвращают пути, будут использовать обратную косую черту, поэтому, даже если вы не передаете их в подпроцессы, вам необходимо их нормализовать.

Ответ 2

path.join позаботится о ненужных разделителях, которые могут возникнуть, если указанные шаблоны поступают из неизвестных источников (например, пользовательский ввод, сторонние API и т.д.).

Итак, path.join('a/','b') path.join('a/','/b'), path.join('a','b') и path.join('a','/b') будут давать a/b.

Без использования, вы обычно делали бы ожидания относительно начала и конца стыков, зная, что у них нет ни одной косой черты.

Ответ 3

Я использую paths.join для обеспечения того, чтобы разделители папок находились в правильных местах, а не обязательно для того, чтобы использовать перекрестные или обратные косые черты. Например:

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

Правильно вставьте разделитель между www и тестом /var/www/test

Ответ 4

Короткий ответ:

Все функции fs.* (например, fs.open и т.д.) обрабатывают имя пути для вас. Таким образом, вам не нужно использовать path.join самостоятельно и сделать код незаметным.

Длинный ответ:

Все функции fs.* вызывают path._makeLong(path), которые, в свою очередь, вызывают path.resolve(path), который имеет специальный RegExps для Windows, который учитывает обратную косую черту \ или косые черты /. Вы можете проверить это для себя, глядя на исходный код: