Чи є якась різниця між наведеними викликами?
path.join(__dirname, 'app')
vs.
path.resolve(__dirname, 'app')
Якому слід віддати перевагу?
Чи є якась різниця між наведеними викликами?
path.join(__dirname, 'app')
vs.
path.resolve(__dirname, 'app')
Якому слід віддати перевагу?
Відповіді:
Дві функції стосуються сегментів, що починаються /дуже різними способами; joinпросто з'єднає його з попереднім аргументом, однак resolveбуде трактувати це як основний каталог та ігнорувати всі попередні шляхи - подумайте про це як результат виконання cdкожного аргументу:
path.join('/a', '/b') // Outputs '/a/b'
path.resolve('/a', '/b') // Outputs '/b'
Ще одне, що слід зазначити, це те path.resolve, що завжди призведе до абсолютної URL-адреси, і ваш робочий каталог використовуватиме як основу для вирішення цього шляху. Але як __dirnameце абсолютний шлях у будь-якому випадку, це не має значення у вашому випадку.
Щодо того, який з них ви повинні використовувати, відповідь така: залежить від того, як ви хочете, щоб сегменти починали /вести себе - чи просто їх слід з'єднати чи вони повинні діяти як новий корінь?
Якщо інші аргументи важко закодовані, це насправді не має значення, і в цьому випадку ви, мабуть, повинні подумати (а) про те, як цей рядок може змінитися в майбутньому, і (б) наскільки він узгоджується з іншими місцями коду.
path.join('/a', '/b', 'c')повернетесь /a/b/c, тоді як path.resolve('/a', '/b', 'c')повернетесь /b/c.
resolveне є найбільш зрозумілим, path.cd([starting dir], [final dir])було б набагато інтуїтивнішим.
think of it as the result of executing cd with each argumentМене , нарешті , зрозуміти його. Спасибі
Операції шляху файлової системи за замовчуванням залежать від операційної системи, нам потрібна річ, яка її абстрагує. pathМодуль надає утиліти або API для роботи з файлами і каталогами шляхами. ви можете включити його у свій проект, використовуючи
const path = require('path');
Два path.joinта path.resolveрізні методи модуля шляху.
Обидва ці способи приймають послідовність шляхів або сегментів шляху.
path.resolve()Метод вирішує послідовність шляхів або сегментів шляху в абсолютний шлях .
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()кожний аргумент буде вирішений з коренем і дасть вихід.
path.resolve()це не еквівалентне в __dirname. Перший повертає робочий каталог, а другий - шлях до поточного файлу.
const path = require('path'); console.log(path.resolve()) console.log(__dirname) console.log(path.resolve()===__dirname)
path.resolve() is equivalent to __dirname
1) path.resolve створює абсолютний шлях.
Метод створює абсолютний шлях справа наліво, поки не побудований абсолютний шлях.
Наприклад:
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) path.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
path.join('a','b','c')повинен призвести до a\b\c.