путь.вступить против пути.решения с каталог
есть ли разница при использовании иpath.join и path.resolve С __dirname для разрешения абсолютного пути в узле.Джей?
должен ли один из них быть предпочтительным при таком использовании (абсолютные разрешения пути составляют 90% случаев использования)?
то есть
const absolutePath = path.join(__dirname, some, dir);
и
const absolutePath = path.resolve(__dirname, some, dir);
оба метода нормализуют путь.
это не дубликат этот вопрос потому что принял ответ неправильный.
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\nodeconst 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