Вам нужно использовать path.join в node.js? - PullRequest
123 голосов
/ 18 марта 2012

как все знают, 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'?Оба, похоже, работают независимо от платформы ...

Ответы [ 4 ]

96 голосов
/ 21 марта 2012

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

86 голосов
/ 28 февраля 2014

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

Так что path.join('a/','b') path.join('a/','/b'), path.join('a','b') и path.join('a','/b') все даст a/b.

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

44 голосов
/ 18 марта 2012

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

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

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

30 голосов
/ 30 ноября 2012

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...