Путь
Модуль 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: эту страницу 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'
Если 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 не является строкой, выбрасывается ошибка 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.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.
Если после обработки всех заданных 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.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-v8.x/docs/api/path.html