Skip to content

Пути к файлам в Node.js

Системные пути к файлам

Каждый файл в системе имеет путь. В Linux и macOS путь может выглядеть так: /users/joe/file.txt

в то время как в компьютерах Windows структура отличается, например: C:\users\joe\file.txt

Необходимо обращать внимание на использование путей в приложениях, поскольку это различие должно учитываться.

Использование модуля path

Этот модуль включается в файлы с помощью:

javascript
const path = require('node:path')

и вы можете начать использовать его методы.

Получение информации из пути

Имея путь, вы можете извлечь из него информацию с помощью этих методов:

  • dirname: получает родительскую папку файла
  • basename: получает часть имени файла
  • extname: получает расширение файла

Пример

javascript
const path = require('node:path')
const notes = '/users/joe/notes.txt'

path.dirname(notes) // /users/joe
path.extname(notes) // .txt
javascript
import path from 'node:path'
const notes = '/users/joe/notes.txt'

path.dirname(notes) // /users/joe
path.extname(notes) // .txt

Вы можете получить имя файла без расширения, указав второй аргумент в basename:

javascript
path.basename(notes, path.extname(notes)) // notes

Работа с путями

Вы можете объединить две или более части пути, используя path.join():

javascript
path.join('/users', 'joe', 'file.txt') // /users/joe/file.txt

Вы можете получить вычисление абсолютного пути относительно пути используя path.resolve():

javascript
path.resolve('joe.txt') // /Users/joe/joe.txt если запущен из домашней папки
path.resolve('tmp', 'joe.txt') // /Users/joe/tmp/joe.txt если запущен из домашней папки

В этом случае Node.js просто добавит /joe.txt к текущему рабочему каталогу. Если вы укажете второй параметр как папку, resolve будет использовать первый в качестве основы для второго.

Если первый параметр начинается со слэша, это означает, что это абсолютный путь:

javascript
path.resolve('/etc', 'joe.txt') // /etc/joe.txt

path.normalize() — еще одна полезная функция, которая попытается вычислить фактический путь, если он содержит относительные спецификаторы, такие как . или .., или двойные слэши:

javascript
path.normalize('/users/joe/../test.txt') // /users/test.txt

Ни resolve, ни normalize не проверяют существование пути. Они просто вычисляют путь на основе полученной информации.