Путь
Исходный код: lib/path.js
Модуль path предоставляет утилиты для работы с путями к файлам и каталогам. К нему можно обратиться следующим образом:
const path = require('path'); Windows и POSIX
По умолчанию работа модуля path зависит от операционной системы, на которой запущена программа Node.js. В частности, при работе в Windows, модуль path предполагает использование путей в стиле Windows.
Поэтому использование path.basename() может давать разные результаты в POSIX и Windows:
В POSIX:
path.basename('C:\\temp\\myfile.html');
// Returns: 'C:\\temp\\myfile.html' В Windows:
path.basename('C:\\temp\\myfile.html');
// Returns: 'myfile.html' Чтобы получить согласованные результаты при работе с путями к файлам Windows на любой операционной системе, используйте path.win32:
В POSIX и Windows:
path.win32.basename('C:\\temp\\myfile.html');
// Returns: 'myfile.html' Чтобы получить согласованные результаты при работе с путями к файлам POSIX на любой операционной системе, используйте path.posix:
В POSIX и Windows:
path.posix.basename('/tmp/myfile.html');
// Returns: 'myfile.html' В Windows Node.js использует концепцию рабочей директории для каждого диска. Это поведение можно наблюдать при использовании пути к диску без обратного слэша. Например, path.resolve('C:\\') потенциально может вернуть другой результат, чем path.resolve('C:'). Для получения дополнительной информации см. эту страницу MSDN.
path.basename(path[, ext])
Метод path.basename() возвращает последнюю часть path, аналогично команде Unix basename. Конечные разделители каталогов игнорируются, см. path.sep.
path.basename('/foo/bar/baz/asdf/quux.html');
// Returns: 'quux.html'
path.basename('/foo/bar/baz/asdf/quux.html', '.html');
// Returns: 'quux' Хотя Windows обычно обрабатывает имена файлов, включая расширения, без учета регистра, эта функция этого не делает. Например, C:\\foo.html и C:\\foo.HTML ссылаются на один и тот же файл, но basename обрабатывает расширение как строку, чувствительную к регистру:
path.win32.basename('C:\\foo.html', '.html');
// Returns: 'foo'
path.win32.basename('C:\\foo.HTML', '.html');
// Returns: 'foo.HTML' Если path не является строкой или ext задано и не является строкой, выбрасывается TypeError.
path.delimiter
Предоставляет разделитель пути, специфичный для платформы:
-
;для Windows -
:для POSIX
Например, в POSIX:
console.log(process.env.PATH); // Prints: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin' process.env.PATH.split(path.delimiter); // Returns: ['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']
В Windows:
console.log(process.env.PATH); // Prints: 'C:\Windows\system32;C:\Windows;C:\Program Files\node\' process.env.PATH.split(path.delimiter); // Returns ['C:\\Windows\\system32', 'C:\\Windows', 'C:\\Program Files\\node\\']
path.dirname(path)
Метод path.dirname() возвращает имя каталога path, аналогично команде Unix dirname. Конечные разделители каталогов игнорируются, см. path.sep.
path.dirname('/foo/bar/baz/asdf/quux');
// Returns: '/foo/bar/baz/asdf' Если path не является строкой, выбрасывается TypeError.
path.extname(path)
Метод path.extname() возвращает расширение path, от последнего вхождения символа . (точка) до конца строки в последней части path. Если в последней части path нет символа ., или если нет символов . кроме первого символа имени файла path (см. path.basename() ), возвращается пустая строка.
path.extname('index.html');
// Returns: '.html'
path.extname('index.coffee.md');
// Returns: '.md'
path.extname('index.');
// Returns: '.'
path.extname('index');
// Returns: ''
path.extname('.index');
// Returns: ''
path.extname('.index.md');
// Returns: '.md' Если path не является строкой, выбрасывается TypeError.
path.format(pathObject)
Метод path.format() возвращает строку пути из объекта. Это противоположно path.parse().
При предоставлении свойств для pathObject помните, что существуют комбинации, где одно свойство имеет приоритет над другим:
-
pathObject.rootигнорируется, если указаноpathObject.dir -
pathObject.extиpathObject.nameигнорируются, если существуетpathObject.base
Например, в POSIX:
// If `dir`, `root` and `base` are provided,
// `${dir}${path.sep}${base}`
// will be returned. `root` is ignored.
path.format({
root: '/ignored',
dir: '/home/user/dir',
base: 'file.txt'
});
// Returns: '/home/user/dir/file.txt'
// `root` will be used if `dir` is not specified.
// If only `root` is provided or `dir` is equal to `root` then the
// platform separator will not be included. `ext` will be ignored.
path.format({
root: '/',
base: 'file.txt',
ext: 'ignored'
});
// Returns: '/file.txt'
// `name` + `ext` will be used if `base` is not specified.
path.format({
root: '/',
name: 'file',
ext: '.txt'
});
// Returns: '/file.txt' В Windows:
path.format({
dir: 'C:\\path\\dir',
base: 'file.txt'
});
// Returns: 'C:\\path\\dir\\file.txt' path.isAbsolute(path)
-
path<строка> - Возвращает: <логическое>
Метод path.isAbsolute() определяет, является ли path абсолютным путем.
Если заданная path — это строка длиной ноль, возвращается false.
Например, в POSIX:
path.isAbsolute('/foo/bar'); // true
path.isAbsolute('/baz/..'); // true
path.isAbsolute('qux/'); // false
path.isAbsolute('.'); // false В Windows:
path.isAbsolute('//server'); // true
path.isAbsolute('\\\\server'); // true
path.isAbsolute('C:/foo/..'); // true
path.isAbsolute('C:\\foo\\..'); // true
path.isAbsolute('bar\\baz'); // false
path.isAbsolute('bar/baz'); // false
path.isAbsolute('.'); // false Если path не является строкой, выбрасывается TypeError.
path.join([...paths])
Метод path.join() объединяет все заданные path сегменты вместе, используя разделитель, специфичный для платформы, затем нормализует полученный путь.
Сегменты пути длиной ноль игнорируются. Если объединенная строка пути имеет длину ноль, возвращается '.', представляющая текущую рабочую директорию.
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// Returns: '/foo/bar/baz/asdf'
path.join('foo', {}, 'bar');
// Throws 'TypeError: Path must be a string. Received {}' Если какой-либо из сегментов пути не является строкой, выбрасывается TypeError.
path.normalize(path)
Метод path.normalize() нормализует заданный path, разрешая сегменты '..' и '.'.
Когда встречаются несколько последовательных символов разделения сегментов пути (например, / в POSIX и либо \ или / в Windows), они заменяются на один экземпляр разделителя сегментов пути, специфичного для платформы (/ в POSIX и \ в Windows). Конечные разделители сохраняются.
Если path — это строка длиной ноль, возвращается '.', представляющая текущую рабочую директорию.
Например, в POSIX:
path.normalize('/foo/bar//baz/asdf/quux/..');
// Returns: '/foo/bar/baz/asdf' В Windows:
path.normalize('C:\\temp\\\\foo\\bar\\..\\');
// Returns: 'C:\\temp\\foo\\' Поскольку Windows распознает несколько разделителей путей, оба разделителя будут заменены экземплярами предпочтительного разделителя Windows (\):
path.win32.normalize('C:////temp\\\\/\\/\\/foo/bar');
// Returns: 'C:\\temp\\foo\\bar' Если path не является строкой, выбрасывается TypeError.
path.parse(path)
Метод path.parse() возвращает объект, свойства которого представляют значимые элементы path. Конечные разделители каталогов игнорируются, см. path.sep.
Возвращаемый объект будет иметь следующие свойства:
Например, на POSIX:
path.parse('/home/user/dir/file.txt');
// Returns:
// { root: '/',
// dir: '/home/user/dir',
// base: 'file.txt',
// ext: '.txt',
// name: 'file' } ┌─────────────────────┬────────────┐ │ dir │ base │ ├──────┬ ├──────┬─────┤ │ root │ │ name │ ext │ " / home/user/dir / file .txt " └──────┴──────────────┴──────┴─────┘ (All spaces in the "" line should be ignored. They are purely for formatting.)
На Windows:
path.parse('C:\\path\\dir\\file.txt');
// Returns:
// { root: 'C:\\',
// dir: 'C:\\path\\dir',
// base: 'file.txt',
// ext: '.txt',
// name: 'file' } ┌─────────────────────┬────────────┐ │ dir │ base │ ├──────┬ ├──────┬─────┤ │ root │ │ name │ ext │ " C:\ path\dir \ file .txt " └──────┴──────────────┴──────┴─────┘ (All spaces in the "" line should be ignored. They are purely for formatting.)
Исключение TypeError выбрасывается, если path не является строкой.
path.posix
Свойство path.posix предоставляет доступ к POSIX-специфическим реализациям методов path.
path.relative(from, to)
Метод path.relative() возвращает относительный путь от from к to на основе текущей рабочей директории. Если from и to разрешаются в один и тот же путь (после вызова path.resolve() для каждого), возвращается строка нулевой длины.
Если строка нулевой длины передана в качестве from или to, вместо неё будет использоваться текущая рабочая директория.
Например, на POSIX:
path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb');
// Returns: '../../impl/bbb' На Windows:
path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb');
// Returns: '..\\..\\impl\\bbb' Исключение TypeError выбрасывается, если from или to не являются строками.
path.resolve([...paths])
Метод path.resolve() разрешает последовательность путей или сегментов путей в абсолютный путь.
Указанная последовательность путей обрабатывается справа налево, и каждый последующий path добавляется в начало, пока не будет построен абсолютный путь. Например, для последовательности сегментов путей: /foo, /bar, baz, вызов path.resolve('/foo', '/bar', 'baz') вернёт /bar/baz, потому что 'baz' не является абсолютным путём, а '/bar' + '/' + 'baz' — является.
Если после обработки всех заданных path сегментов абсолютный путь ещё не сгенерирован, используется текущая рабочая директория.
Полученный путь нормализован, и конечные слэши удаляются, за исключением случая, когда путь разрешен до корневого каталога.
Сегменты путей нулевой длины игнорируются.
Если не передано ни одного path сегмента, path.resolve() вернёт абсолютный путь текущей рабочей директории.
path.resolve('/foo/bar', './baz');
// Returns: '/foo/bar/baz'
path.resolve('/foo/bar', '/tmp/file/');
// Returns: '/tmp/file'
path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
// If the current working directory is /home/myself/node,
// this returns '/home/myself/node/wwwroot/static_files/gif/image.gif' Исключение TypeError выбрасывается, если какой-либо из аргументов не является строкой.
path.sep
Предоставляет разделитель сегмента пути, специфичный для платформы:
-
\на Windows -
/на POSIX
Например, на POSIX:
'foo/bar/baz'.split(path.sep); // Returns: ['foo', 'bar', 'baz']
На Windows:
'foo\\bar\\baz'.split(path.sep); // Returns: ['foo', 'bar', 'baz']
На Windows, как обратный слэш (/), так и прямой слэш (\) принимаются в качестве разделителей сегментов пути; однако, методы path добавляют только обратные слэши (\).
path.toNamespacedPath(path)
Только на системах Windows, возвращает эквивалентный префикс-путь с пространством имен для данного path. Если path не является строкой, path возвращается без изменений.
Этот метод имеет смысл только на системах Windows. На системах POSIX метод не работает и всегда возвращает path без изменений.
path.win32
Свойство path.win32 предоставляет доступ к Windows-специфическим реализациям методов path.
© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v12.x/docs/api/path.html