путь.вступить против пути.решения с каталог



есть ли разница при использовании иpath.join и path.resolve С __dirname для разрешения абсолютного пути в узле.Джей?



должен ли один из них быть предпочтительным при таком использовании (абсолютные разрешения пути составляют 90% случаев использования)?



то есть



const absolutePath = path.join(__dirname, some, dir);


и



const absolutePath = path.resolve(__dirname, some, dir);


оба метода нормализуют путь.



это не дубликат этот вопрос потому что принял ответ неправильный.

488   2  

2 ответов:

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

path.join возвращает нормализованный путь путем объединения двух путей вместе. Он может вернуть абсолютный путь, но это не всегда так.

например:

path.join('app/libs/oauth', '/../ssl')

разрешает app/libs/ssl

path.resolve, С другой стороны, разрешит к абсолютному пути.

например, когда вы беги:

path.resolve('bar', '/foo');

возвращенный путь будет /foo потому что это первый абсолютный путь, который может быть построен.

однако, если вы запустите:

path.resolve('/bar/bae', '/foo', 'test');

возвращенный путь будет /foo/test снова, потому что это первый абсолютный путь, который может быть сформирован справа налево.

если вы не предоставляете путь, который указывает корневой каталог, то пути, указанные в resolve функции добавляются в текущий рабочий каталог. Так если ваш рабочий каталог был /home/mark/project/:

path.resolve('test', 'directory', '../back');

разрешает

/home/mark/project/test/back

используя __dirname дает абсолютный путь к текущему рабочему каталогу. Когда вы используете path.resolve или path.join они вернут тот же результат, если вы дадите тот же путь после __dirname. В таких случаях это действительно просто вопрос предпочтения.

const absolutePath = path.join(__dirname, some, dir);

и

const absolutePath = path.resolve(__dirname, some, dir);

path.join сцепляет __dirname который является именем каталога текущего файла, связанного со значениями some и dir с сепаратором платформы специфическим.

где

path.resolve будет процесс __dirname,some и dir т. е. слева направо, добавляя его обработки.

если любое из значений some или dir соответствует корневому пути, то предыдущий путь будет опущен и обрабатывать rest, рассматривая его как root

чтобы лучше понять концепцию, позвольте мне объяснить оба немного более подробно следующим образом: -

The path.join и path.resolve два различных метода или функции модуля пути, предоставляемые nodejs.

где оба принимают список пути, но разница приходит в результате, т. е. как они обрабатывают этот путь.

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

при отсутствии аргументов

следующий пример поможет вам четко понять оба понятия: -

мой файл index.js и текущий рабочий каталог E:\MyFolder\Pjtz\node

const path = require('path');

console.log("path.join() : ", path.join());
// outputs .
console.log("path.resolve() : ", path.resolve());
// outputs current directory or equalent to __dirname

результат

λ node index.js
path.join() :  .
path.resolve() :  E:\MyFolder\Pjtz\node

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

когда какой-то корневой путь передается в качестве аргументов

const path=require('path');

console.log("path.join() : " ,path.join('abc','/bcd'));
console.log("path.resolve() : ",path.resolve('abc','/bcd'));

я

λ node index.js
path.join() :  abc\bcd
path.resolve() :  E:\bcd

path.join() только связывает входной список с разделителем, специфичным для платформы, в то время как

Comments

    Ничего не найдено.