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