Разница между путями.решение и путь.присоединиться к вызову?



есть ли какая-то разница между следующими вызовами?



path.join(__dirname, 'app')


и



path.resolve(__dirname, 'app')


какой из них следует предпочесть?

471   3  

3 ответов:

две функции имеют дело с сегментами, начиная с / очень по-разному; join будет просто объединить его с предыдущим аргументом, однако resolve будет рассматривать это как корневой каталог, и игнорировать все предыдущие пути-думайте об этом как о результате выполнения cd С каждым аргументом:

path.join('/a', '/b') // Outputs '/a/b'

path.resolve('/a', '/b') // Outputs '/b'

еще одна вещь, чтобы отметить, что path.resolve всегда будет приводить к абсолютному URL-адресу и будет использовать ваш рабочий каталог в качестве базы для разрешения этого пути. Но как __dirname это абсолютный путь в любом случае это не имеет значения в вашем случае.

а на какой вы должны использовать, ответ: это зависит от того, как вы хотите, сегменты, начиная с / вести себя-должны ли они быть просто объединены или они должны действовать как новый корень?

если другие аргументы жестко закодированы, это действительно не имеет значения, и в этом случае вы, вероятно, должны рассмотреть (а), как эта строка может измениться в будущем и (Б) насколько она согласуется с другими местами в код.

операции по умолчанию пути файловой системы варьируются в зависимости от операционной системы нам нужна какая-то вещь, которая ее абстрагирует. Элемент path модуль предоставляет утилиты или API для работы с файлом и каталогом пути. вы можете включить его в свой проект с помощью

const path = require('path');

The path.join и path.resolve два различных метода модуля пути.

оба эти метода принимают последовательность путей или сегментов пути.

The path.resolve() метод разрешает a последовательность путей или сегментов пути в абсолютный путь.

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

для того чтобы лучше понять и дифференцировать поведение, позвольте мне объяснить это с разных сценариях.

1. Если мы не предоставляем никаких аргументов или пустую строку

в моем случае имя 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 of the node process

и при запуске результат, как показано ниже

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

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

2. Добавление / путь как любой из аргументы.

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() только связывает входной список с разделителем платформы, в то время как path.resolve() обрабатывайте последовательность путей справа налево, с каждым последующим путем до тех пор, пока не будет построен абсолютный путь.

path.join() объединяет каждый аргумент с конкретными разделителями ОС, в то время как path.resolve() будет разрешить каждый спор с корня и производства продукции.

1) путь.решения создает абсолютный путь.

метод создает absoulte path справа налево пока не будет построен абсолютный путь.

например:

path.resolve('/a', 'b', 'c');     //    C:\a\b\c
path.resolve('/a', '/b', 'c');    //    C:\b\c
path.resolve('/a', '/b', '/c');   //    C:\c

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

например:

path.resolve('a', 'b', 'c');     //    C:\{current_working_directory}\a\b\c

2) путь.join соединяет все пути и нормализует результат

для пример:

path.join('/a', '/b', '/c');   //   \a\b\c
path.join('/a', '/b', 'c');    //   \a\b\c
path.join('/a', 'b', 'c');     //   \a\b\c
path.join('a', 'b', 'c');      //   \a\b\c

Comments

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