Путь
Модуль path предоставляет утилиты для работы с путями к файлам и каталогам. К нему можно получить доступ с помощью:
const path = require('path');
Windows и POSIX
По умолчанию, работа модуля path зависит от операционной системы, на которой запущено приложение Node.js. В частности, при запуске на операционной системе Windows, модуль path предполагает использование путей в стиле Windows.
Например, использование функции path.basename() с путём к файлу в стиле Windows C:\temp\myfile.html, даст разные результаты при выполнении на 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'
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<строка> - Возвращает: <логическое значение>
Метод 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 игнорируются. Если объединённая строка пути имеет нулевую длину, возвращается '.', представляющая текущий рабочий каталог.
Например:
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 предоставляет доступ к реализациям методов path, специфичным для Windows.
© 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-v6.x/docs/api/path.html