Skip to content

Путь

[Стабильно: 2 - Стабильно]

Стабильно: 2 Стабильность: 2 - Стабильно

Исходный код: lib/path.js

Модуль node:path предоставляет утилиты для работы с путями к файлам и каталогам. Доступ к нему можно получить с помощью:

js
const path = require('node:path')
js
import path from 'node:path'

Windows против POSIX

Работа модуля node:path по умолчанию зависит от операционной системы, на которой запущено приложение Node.js. В частности, при работе в операционной системе Windows модуль node:path будет предполагать использование путей в стиле Windows.

Поэтому использование path.basename() может давать разные результаты в POSIX и Windows:

В POSIX:

js
path.basename('C:\\temp\\myfile.html')
// Возвращает: 'C:\\temp\\myfile.html'

В Windows:

js
path.basename('C:\\temp\\myfile.html')
// Возвращает: 'myfile.html'

Для получения согласованных результатов при работе с путями к файлам Windows в любой операционной системе используйте path.win32:

В POSIX и Windows:

js
path.win32.basename('C:\\temp\\myfile.html')
// Возвращает: 'myfile.html'

Для получения согласованных результатов при работе с путями к файлам POSIX в любой операционной системе используйте path.posix:

В POSIX и Windows:

js
path.posix.basename('/tmp/myfile.html')
// Возвращает: 'myfile.html'

В Windows Node.js следует концепции рабочего каталога на каждый диск. Это поведение можно наблюдать при использовании пути к диску без обратного слеша. Например, path.resolve('C:\\') может потенциально возвращать результат, отличный от path.resolve('C:'). Для получения дополнительной информации см. эту страницу MSDN.

path.basename(path[, suffix])

[История]

ВерсияИзменения
v6.0.0Теперь передача нестроки в качестве аргумента path вызовет исключение.
v0.1.25Добавлено в: v0.1.25

Метод path.basename() возвращает последнюю часть пути, аналогично команде Unix basename. Конечные разделители каталогов игнорируются.

js
path.basename('/foo/bar/baz/asdf/quux.html')
// Возвращает: 'quux.html'

path.basename('/foo/bar/baz/asdf/quux.html', '.html')
// Возвращает: 'quux'

Хотя Windows обычно обрабатывает имена файлов, включая расширения файлов, без учёта регистра, эта функция этого не делает. Например, C:\\foo.html и C:\\foo.HTML относятся к одному и тому же файлу, но basename обрабатывает расширение как строку, чувствительную к регистру:

js
path.win32.basename('C:\\foo.html', '.html')
// Возвращает: 'foo'

path.win32.basename('C:\\foo.HTML', '.html')
// Возвращает: 'foo.HTML'

Если path не является строкой или если suffix задан и не является строкой, будет выброшено исключение TypeError.

path.delimiter

Добавлен в: v0.9.3

Предоставляет разделитель пути, зависящий от платформы:

  • ; для Windows
  • : для POSIX

Например, в POSIX:

js
console.log(process.env.PATH)
// Выводит: '/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin'

process.env.PATH.split(path.delimiter)
// Возвращает: ['/usr/bin', '/bin', '/usr/sbin', '/sbin', '/usr/local/bin']

В Windows:

js
console.log(process.env.PATH)
// Выводит: 'C:\Windows\system32;C:\Windows;C:\Program Files\node\'

process.env.PATH.split(path.delimiter)
// Возвращает ['C:\\Windows\\system32', 'C:\\Windows', 'C:\\Program Files\\node\\']

path.dirname(path)

[История]

ВерсияИзменения
v6.0.0Теперь передача нестрокового значения в качестве аргумента path приведет к ошибке.
v0.1.16Добавлено в: v0.1.16

Метод path.dirname() возвращает имя каталога path, аналогично команде Unix dirname. Конечные разделители каталогов игнорируются, см. path.sep.

js
path.dirname('/foo/bar/baz/asdf/quux')
// Возвращает: '/foo/bar/baz/asdf'

Если path не является строкой, генерируется исключение TypeError.

path.extname(path)

[История]

ВерсияИзменения
v6.0.0Теперь передача нестрокового значения в качестве аргумента path приведет к ошибке.
v0.1.25Добавлено в: v0.1.25

Метод path.extname() возвращает расширение path, начиная с последнего вхождения символа . (точка) до конца строки в последней части path. Если в последней части path нет символа ., или если нет символов ., кроме первого символа базового имени path (см. path.basename()), возвращается пустая строка.

js
path.extname('index.html')
// Возвращает: '.html'

path.extname('index.coffee.md')
// Возвращает: '.md'

path.extname('index.')
// Возвращает: '.'

path.extname('index')
// Возвращает: ''

path.extname('.index')
// Возвращает: ''

path.extname('.index.md')
// Возвращает: '.md'

Если path не является строкой, генерируется исключение TypeError.

path.format(pathObject)

[История]

ВерсияИзменения
v19.0.0Точка будет добавлена, если она не указана в ext.
v0.11.15Добавлено в: v0.11.15

Метод path.format() возвращает строку пути из объекта. Это противоположность path.parse().

При предоставлении свойств pathObject помните, что существуют комбинации, где одно свойство имеет приоритет над другим:

  • pathObject.root игнорируется, если предоставлено pathObject.dir
  • pathObject.ext и pathObject.name игнорируются, если существует pathObject.base

Например, в POSIX:

js
// Если предоставлены `dir`, `root` и `base`,
// `${dir}${path.sep}${base}`
// будет возвращено. `root` игнорируется.
path.format({
  root: '/ignored',
  dir: '/home/user/dir',
  base: 'file.txt',
})
// Возвращает: '/home/user/dir/file.txt'

// `root` будет использоваться, если `dir` не указан.
// Если предоставлен только `root` или `dir` равен `root`, то
// разделитель платформы не будет включен. `ext` будет игнорироваться.
path.format({
  root: '/',
  base: 'file.txt',
  ext: 'ignored',
})
// Возвращает: '/file.txt'

// `name` + `ext` будут использоваться, если `base` не указан.
path.format({
  root: '/',
  name: 'file',
  ext: '.txt',
})
// Возвращает: '/file.txt'

// Точка будет добавлена, если она не указана в `ext`.
path.format({
  root: '/',
  name: 'file',
  ext: 'txt',
})
// Возвращает: '/file.txt'

В Windows:

js
path.format({
  dir: 'C:\\path\\dir',
  base: 'file.txt',
})
// Возвращает: 'C:\\path\\dir\\file.txt'

path.matchesGlob(path, pattern)

Добавлен в: v22.5.0, v20.17.0

[Стабильность: 1 - Экспериментальный]

Стабильность: 1 Стабильность: 1 - Экспериментальный

  • path <string> Путь для сопоставления с шаблоном glob.
  • pattern <string> Шаблон glob для проверки пути.
  • Возвращает: <boolean> Соответствует ли path шаблону pattern.

Метод path.matchesGlob() определяет, соответствует ли path шаблону pattern.

Например:

js
path.matchesGlob('/foo/bar', '/foo/*') // true
path.matchesGlob('/foo/bar*', 'foo/bird') // false

Выбрасывает TypeError, если path или pattern не являются строками.

path.isAbsolute(path)

Добавлен в: v0.11.2

Метод path.isAbsolute() определяет, является ли path абсолютным путем.

Если заданный path является строкой нулевой длины, будет возвращено false.

Например, в POSIX:

js
path.isAbsolute('/foo/bar') // true
path.isAbsolute('/baz/..') // true
path.isAbsolute('qux/') // false
path.isAbsolute('.') // false

В Windows:

js
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])

Добавлен в: v0.1.16

  • ...paths <string> Последовательность сегментов пути
  • Возвращает: <string>

Метод path.join() соединяет все заданные сегменты path вместе, используя разделитель, зависящий от платформы, в качестве разделителя, а затем нормализует результирующий путь.

Сегменты path нулевой длины игнорируются. Если результирующая строка пути имеет нулевую длину, будет возвращено '.', представляющее текущий рабочий каталог.

js
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..')
// Возвращает: '/foo/bar/baz/asdf'

path.join('foo', {}, 'bar')
// Выбрасывает 'TypeError: Path must be a string. Received {}'

Выбрасывает TypeError, если любой из сегментов пути не является строкой.

path.normalize(path)

Добавлен в: v0.1.23

Метод path.normalize() нормализует заданный path, разрешая сегменты '..' и '.'.

Когда обнаруживаются несколько последовательных разделительных символов сегментов пути (например, / в POSIX и \ или / в Windows), они заменяются одним экземпляром разделителя сегмента пути, специфичного для платформы (/ в POSIX и \ в Windows). Конечные разделители сохраняются.

Если path представляет собой строку нулевой длины, возвращается '.', представляющий текущий рабочий каталог.

В POSIX типы нормализации, применяемые этой функцией, не строго соответствуют спецификации POSIX. Например, эта функция заменит два ведущих слеша на один, как если бы это был обычный абсолютный путь, тогда как некоторые системы POSIX присваивают специальное значение путям, начинающимся с ровно двух слешей. Аналогично, другие подстановки, выполняемые этой функцией, такие как удаление сегментов .., могут изменить способ разрешения пути базовой системой.

Например, в POSIX:

js
path.normalize('/foo/bar//baz/asdf/quux/..')
// Возвращает: '/foo/bar/baz/asdf'

В Windows:

js
path.normalize('C:\\temp\\\\foo\\bar\\..\\')
// Возвращает: 'C:\\temp\\foo\\'

Поскольку Windows распознает несколько разделителей путей, оба разделителя будут заменены экземплярами предпочтительного разделителя Windows (\):

js
path.win32.normalize('C:////temp\\\\/\\/\\/foo/bar')
// Возвращает: 'C:\\temp\\foo\\bar'

Выбрасывается TypeError, если path не является строкой.

path.parse(path)

Добавлен в: v0.11.15

Метод path.parse() возвращает объект, свойства которого представляют значимые элементы path. Конечные разделители каталогов игнорируются, см. path.sep.

Возвращаемый объект будет иметь следующие свойства:

Например, в POSIX:

js
path.parse('/home/user/dir/file.txt')
// Возвращает:
// { root: '/',
//   dir: '/home/user/dir',
//   base: 'file.txt',
//   ext: '.txt',
//   name: 'file' }
text
┌─────────────────────┬────────────┐
│          dir        │    base    │
├──────┬              ├──────┬─────┤
│ root │              │ name │ ext │
"  /    home/user/dir / file  .txt "
└──────┴──────────────┴──────┴─────┘
(Все пробелы в строке "" должны игнорироваться. Они предназначены только для форматирования.)

В Windows:

js
path.parse('C:\\path\\dir\\file.txt')
// Возвращает:
// { root: 'C:\\',
//   dir: 'C:\\path\\dir',
//   base: 'file.txt',
//   ext: '.txt',
//   name: 'file' }
text
┌─────────────────────┬────────────┐
│          dir        │    base    │
├──────┬              ├──────┬─────┤
│ root │              │ name │ ext │
" C:\      path\dir   \ file  .txt "
└──────┴──────────────┴──────┴─────┘
(Все пробелы в строке "" должны игнорироваться. Они предназначены только для форматирования.)

Выбрасывается TypeError, если path не является строкой.

path.posix

[История]

ВерсияИзменения
v15.3.0Доступен как require('path/posix').
v0.11.15Добавлено в: v0.11.15

Свойство path.posix предоставляет доступ к реализациям методов path, специфичным для POSIX.

API доступен через require('node:path').posix или require('node:path/posix').

path.relative(from, to)

[История]

ВерсияИзменения
v6.8.0В Windows начальные слеши для UNC-путей теперь включаются в возвращаемое значение.
v0.5.0Добавлено в: v0.5.0

Метод path.relative() возвращает относительный путь от from к to на основе текущего рабочего каталога. Если from и to указывают на один и тот же путь (после вызова path.resolve() для каждого), возвращается строка нулевой длины.

Если в качестве from или to передается строка нулевой длины, вместо неё будет использован текущий рабочий каталог.

Например, в POSIX:

js
path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb')
// Возвращает: '../../impl/bbb'

В Windows:

js
path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb')
// Возвращает: '..\\..\\impl\\bbb'

Выбрасывается исключение TypeError, если from или to не является строкой.

path.resolve([...paths])

Добавлено в: v0.3.4

  • ...paths <string> Последовательность путей или сегментов пути
  • Возвращает: <string>

Метод path.resolve() преобразует последовательность путей или сегментов пути в абсолютный путь.

Заданная последовательность путей обрабатывается справа налево, при этом каждый последующий path добавляется в начало, пока не будет построен абсолютный путь. Например, для последовательности сегментов пути: /foo, /bar, baz, вызов path.resolve('/foo', '/bar', 'baz') вернет /bar/baz, потому что 'baz' не является абсолютным путем, но '/bar' + '/' + 'baz' является.

Если после обработки всех заданных сегментов path абсолютный путь еще не сформирован, используется текущий рабочий каталог.

Полученный путь нормализуется, и конечные слеши удаляются, если только путь не разрешен до корневого каталога.

Сегменты path нулевой длины игнорируются.

Если сегменты path не переданы, path.resolve() вернет абсолютный путь текущего рабочего каталога.

js
path.resolve('/foo/bar', './baz')
// Возвращает: '/foo/bar/baz'

path.resolve('/foo/bar', '/tmp/file/')
// Возвращает: '/tmp/file'

path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif')
// Если текущий рабочий каталог /home/myself/node,
// это вернет '/home/myself/node/wwwroot/static_files/gif/image.gif'

Выбрасывается исключение TypeError, если любой из аргументов не является строкой.

path.sep

Добавлен в: v0.7.9

Предоставляет разделитель сегментов пути, зависящий от платформы:

  • \ в Windows
  • / в POSIX

Например, в POSIX:

js
'foo/bar/baz'.split(path.sep)
// Возвращает: ['foo', 'bar', 'baz']

В Windows:

js
'foo\\bar\\baz'.split(path.sep)
// Возвращает: ['foo', 'bar', 'baz']

В Windows в качестве разделителей сегментов пути принимаются как косая черта (/), так и обратная косая черта (\); однако методы path добавляют только обратные косые черты (\).

path.toNamespacedPath(path)

Добавлен в: v9.0.0

Только в системах Windows возвращает эквивалентный путь с префиксом пространства имён для заданного path. Если path не является строкой, path будет возвращён без изменений.

Этот метод имеет смысл только в системах Windows. В системах POSIX метод не работает и всегда возвращает path без изменений.

path.win32

[История]

ВерсияИзменения
v15.3.0Доступен как require('path/win32').
v0.11.15Добавлено в: v0.11.15

Свойство path.win32 предоставляет доступ к реализациям методов path, специфичным для Windows.

API доступен через require('node:path').win32 или require('node:path/win32').