Путь
Исходный код: 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: this MSDN page.
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' Ошибка TypeError генерируется, если path не является строкой или если ext предоставлено и не является строкой.
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' Ошибка TypeError генерируется, если path не является строкой.
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' Ошибка TypeError генерируется, если path не является строкой.
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 Ошибка TypeError генерируется, если path не является строкой.
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.)
Если path не является строкой, выбрасывается исключение TypeError.
path.posix
Свойство path.posix предоставляет доступ к POSIX-специфическим реализациям методов path.
К API можно получить доступ через require('path').posix или require('path/posix').
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' Если from или to не являются строками, выбрасывается исключение TypeError.
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 предоставляет доступ к реализациям методов path, специфичным для Windows.
К API можно получить доступ через require('path').win32 или require('path/win32').
© 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-v16.x/docs/api/path.html