v18.x.x
Стабильность: 2 – Стабильная
АПИ является удовлетворительным. Совместимость с NPM имеет высший приоритет и не будет нарушена кроме случаев явной необходимости.
Модуль node:path
предоставляет утилиты для работы с путями к файлам и каталогам. Доступ к нему можно получить с помощью:
|
Windows против POSIX¶
Работа модуля node:path
по умолчанию зависит от операционной системы, на которой запущено приложение Node.js. В частности, при работе в операционной системе Windows модуль node:path
будет считать, что используются пути в стиле Windows.
Поэтому использование path.basename()
может дать разные результаты на POSIX и Windows:
На POSIX:
|
В Windows:
|
Для достижения последовательных результатов при работе с путями к файлам Windows в любой операционной системе используйте path.win32
:
В POSIX и Windows:
|
Для достижения согласованных результатов при работе с путями к файлам POSIX в любой операционной системе используйте path.posix
:
В POSIX и Windows:
|
В Windows Node.js следует концепции рабочего каталога на каждом диске. Такое поведение можно наблюдать при использовании пути к диску без обратной косой черты. Например, path.resolve('C:\')
потенциально может вернуть другой результат, чем path.resolve('C:')
. Для получения дополнительной информации смотрите эту страницу MSDN.
path.basename(path[, suffix])
¶
путь
<string>
suffix
<string>
Необязательный суффикс для удаления- Возвращает:
<string>
Метод path.basename()
возвращает последнюю часть path
, аналогично команде Unix basename
. Заглавные разделители каталогов игнорируются.
|
Хотя Windows обычно обрабатывает имена файлов, включая расширения файлов, без учета регистра, эта функция этого не делает. Например, C:\foo.html
и C:\foo.HTML
ссылаются на один и тот же файл, но basename
рассматривает расширение как строку, чувствительную к регистру:
|
Ошибка TypeError
возникает, если path
не является строкой или если указан `suffix, который не является строкой.
path.delimiter
¶
<string>
Предоставляет специфический для платформы разделитель путей:
;
для Windows:
для POSIX
Например, на POSIX:
|
В Windows:
|
path.dirname(path)
¶
path
<string>
- Возвращает:
<string>
Метод path.dirname()
возвращает имя каталога пути
, аналогично команде Unix dirname
. Заглавные разделители каталогов игнорируются, см. path.sep
.
|
Ошибка TypeError
возникает, если path
не является строкой.
path.extname(path)
¶
path
<string>
- Возвращает:
<string>
Метод path.extname()
возвращает расширение пути
, начиная с последнего появления символа .
(точка) до конца строки в последней части пути
. Если в последней части path
нет символа .
, или если нет символов .
, кроме первого символа основного имени path
(см. path.basename()
), возвращается пустая строка.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Ошибка TypeError
возникает, если path
не является строкой.
path.format(pathObject)
¶
pathObject
<Object>
Любой объект JavaScript, имеющий следующие свойства:dir
<string>
root
<string>
base
<string>
name
<string>
ext
<string>
- Возвращает:
<string>
Метод path.format()
возвращает строку пути из объекта. Это противоположность path.parse()
.
При задании свойств для pathObject
помните, что существуют комбинации, в которых одно свойство имеет приоритет над другим:
pathObject.root
игнорируется, если указаноpathObject.dir
.pathObject.ext
иpathObject.name
игнорируются, если существуетpathObject.base
.
Например, на POSIX:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
В Windows:
|
path.isAbsolute(path)
¶
путь
<string>
- Возвращает:
<boolean>
Метод path.isAbsolute()
определяет, является ли path
абсолютным путем.
Если заданный path
является строкой нулевой длины, будет возвращена false
.
Например, на POSIX:
|
В Windows:
|
Ошибка TypeError
возникает, если path
не является строкой.
path.join([...paths])
¶
...paths
<string>
Последовательность сегментов пути- Возвращает:
<string>
Метод path.join()
объединяет все заданные сегменты пути
вместе, используя в качестве разделителя специфический для платформы разделитель, а затем нормализует полученный путь.
Сегменты пути
нулевой длины игнорируются. Если объединенная строка пути является строкой нулевой длины, то будет возвращена .'
, представляющая текущий рабочий каталог.
|
Ошибка TypeError
возникает, если любой из сегментов пути не является строкой.
path.normalize(path)
¶
путь
<string>
- Возвращает:
<string>
Метод path.normalize()
нормализует заданный путь
, разрешая сегменты ...
и ...
.
Если найдено несколько последовательных символов разделения сегментов пути (например, /
на POSIX и \
или /
на Windows), они заменяются одним экземпляром специфического для платформы разделителя сегментов пути (/
на POSIX и \
на Windows). Последующие разделители сохраняются.
Если path
является строкой нулевой длины, возвращается '.'
, представляющий текущий рабочий каталог.
Например, на POSIX:
|
В Windows:
|
Поскольку Windows распознает несколько разделителей путей, оба разделителя будут заменены экземплярами предпочитаемого Windows разделителя (\
):
|
Ошибка TypeError
возникает, если path
не является строкой.
path.parse(path)
¶
путь
<string>
- Возвращает:
<Object>
Метод path.parse()
возвращает объект, свойства которого представляют значимые элементы пути
. Заглавные разделители каталогов игнорируются, см. path.sep
.
Возвращаемый объект будет иметь следующие свойства:
dir
<string>
root
<string>
база
<string>
name
<string>
ext
<string>
Например, на POSIX:
|
|
В Windows:
|
|
Ошибка TypeError
возникает, если path
не является строкой.
path.posix
¶
<Object>
Свойство path.posix
предоставляет доступ к POSIX-специфическим реализациям методов path
.
API доступен через require('node:path').posix
или require('node:path/posix')
.
path.relative(from, to)
¶
from
<string>
to
<string>
- Возвращает:
<string>
Метод path.relative()
возвращает относительный путь от from
к to
на основе текущего рабочего каталога. Если from
и to
разрешаются в один и тот же путь (после вызова path.resolve()
для каждого), возвращается строка нулевой длины.
Если в качестве from
или to
передана строка нулевой длины, то вместо строк нулевой длины будет использоваться текущий рабочий каталог.
Например, на POSIX:
|
В Windows:
|
Ошибка TypeError
возникает, если from
или to
не является строкой.
path.resolve([...paths])
¶
...paths
<string>
Последовательность путей или сегментов путей- Возвращает:
<string>
Метод path.resolve()
преобразует последовательность путей или сегментов путей в абсолютный путь.
Заданная последовательность путей обрабатывается справа налево, с добавлением каждого последующего path
, пока не будет построен абсолютный путь. Например, если задана последовательность сегментов пути: /foo
, /bar
, baz
, вызов path.resolve('/foo', '/bar', 'baz')
вернет /bar/baz
, потому что 'baz'
не является абсолютным путем, а '/bar' + '/' + 'baz'
является.
Если после обработки всех заданных сегментов path
абсолютный путь еще не сгенерирован, то используется текущий рабочий каталог.
Результирующий путь нормализуется и удаляются косые черты, если только путь не разрешается в корневой каталог.
Сегменты пути
нулевой длины игнорируются.
Если сегменты path
не переданы, path.resolve()
вернет абсолютный путь к текущему рабочему каталогу.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Ошибка TypeError
возникает, если любой из аргументов не является строкой.
path.sep
¶
<string>
Предоставляет специфический для платформы разделитель сегментов пути:
\
в Windows/
на POSIX
Например, на POSIX:
|
В Windows:
|
В Windows в качестве разделителя сегментов пути принимается как прямая косая черта (/
), так и обратная косая черта (\
); однако методы path
добавляют только обратную косую черту (\
).
path.toNamespacedPath(path)
¶
путь
<string>
- Возвращает:
<string>
Только в системах Windows, возвращает эквивалентный namespace-prefixed path для заданного path
. Если path
не является строкой, path
будет возвращен без изменений.
Этот метод имеет смысл только в системах Windows. В POSIX-системах метод не работает и всегда возвращает path
без изменений.
path.win32
¶
<Object>
Свойство path.win32
предоставляет доступ к Windows-специфическим реализациям методов path
.
API доступен через require('node:path').win32
или require('node:path/win32')
.
Node.js — это популярная среда выполнения JavaScript, которая позволяет разрабатывать серверные приложения на этом языке. Однако, при работе с путями в Node.js на платформе Windows могут возникать некоторые сложности, связанные с различиями в синтаксисе путей и символах, используемых для разделения каталогов и файлов.
Важно понимать особенности работы с путями в Node.js на Windows, чтобы ваше приложение корректно обрабатывало пути к файлам и каталогам, включая поддержку специфических для Windows символов, таких как обратный слеш (\) в качестве разделителя.
В данной статье мы рассмотрим основные методы и инструменты, которые помогут вам правильно работать с путями в Node.js на Windows, чтобы ваше приложение было переносимым и не зависело от конкретной операционной системы.
Благодаря использованию специальных модулей Node.js, таких как path и fs, вы сможете без труда манипулировать путями в вашем приложении, вне зависимости от того, на какой платформе оно работает.
Содержание
- Знакомство с работой путей в Node.js на Windows
- Основные понятия и термины
- Преимущества использования путей в Node.js на Windows
- Работа с абсолютными путями
- Работа с относительными путями
- Преобразование путей в Node.js на Windows
Знакомство с работой путей в Node.js на Windows
При разработке приложений на Node.js на операционной системе Windows важно понимать, как работают пути к файлам и директориям.
В Windows используется обратная косая черта (\) в качестве разделителя пути, в отличие от прямой косой черты (/) в Unix-подобных системах. Также в Windows допускается использование двойных и одинарных кавычек в пути, что позволяет включать специальные символы или пробелы в имена файлов.
Node.js предоставляет встроенный модуль path
, который содержит множество функций для работы с путями. Используя этот модуль, можно создавать, обрабатывать и преобразовывать пути к файлам и директориям.
Вот некоторые из наиболее часто используемых методов модуля path
:
path.join()
— объединяет несколько частей пути в один полный путь;path.resolve()
— преобразует относительный путь в абсолютный путь;path.dirname()
— возвращает имя директории, содержащей файл;path.basename()
— возвращает имя файла без расширения;path.extname()
— возвращает расширение файла;path.normalize()
— нормализует путь, убирая из него лишние символы и учетные записи;path.isAbsolute()
— проверяет, является ли путь абсолютным;path.relative()
— вычисляет относительный путь между двумя путями.
Использование модуля path
позволяет писать переносимый код, который будет корректно работать как на Windows, так и на Unix-подобных системах.
Понимание особенностей работы с путями в Node.js на Windows поможет вам разрабатывать приложения без проблем со ссылками на файлы и директории. Знание методов модуля path
позволит вам легко и гибко управлять путями в ваших проектах.
Основные понятия и термины
В работе с путями в Node.js на Windows важно понимать некоторые основные понятия и термины. Ниже приведены наиболее важные из них:
Термин | Описание |
---|---|
Путь | Строка, которая указывает на местоположение файла или директории в файловой системе. |
Абсолютный путь | Путь, который полностью указывает на местоположение файла или директории относительно корня файловой системы. |
Относительный путь | Путь, который указывает на местоположение файла или директории относительно текущей рабочей директории. |
Расширение файла | Часть имени файла после последней точки, которая указывает на его тип или формат. |
Имя файла | Часть пути файла или директории после последнего разделителя пути. |
Разделитель пути | Символ, который используется для разделения компонентов пути. На Windows это символ «\». |
Понимание этих основных понятий и терминов поможет вам корректно работать с путями в Node.js на Windows, избегая ошибок и учитывая специфику данной операционной системы.
Преимущества использования путей в Node.js на Windows
1. Кросс-платформенность. Пути в Node.js предоставляют удобный способ обращения к файлам и папкам независимо от операционной системы. Это позволяет разработчику писать код, который будет работать и на Windows, и на Linux, и на macOS.
2. Удобство и гибкость. Node.js предлагает широкий спектр методов и функций для работы с путями, позволяя разработчику выбрать наиболее удобный и гибкий способ в зависимости от конкретной задачи. Например, с помощью методов path.resolve() и path.join() можно легко создавать абсолютные и относительные пути.
3. Безопасность. Использование путей дает возможность контролировать доступ к файлам и папкам. Разработчик может указать абсолютные пути, которые будут недоступны для чтения или записи, что повышает безопасность приложения.
4. Совместимость с другими модулями. В Node.js существует множество модулей, которые используют пути для взаимодействия с файлами и папками. Знание и использование путей позволяет разработчику интегрировать свой код с существующими модулями и использовать их функциональность.
5. Простота чтения и понимания кода. Использование путей делает код более понятным и читаемым. Когда пути явно указаны, это позволяет легче ориентироваться в структуре проекта и найти нужные файлы и папки.
В итоге, использование путей в Node.js на Windows является важным аспектом разработки. Оно помогает создавать кросс-платформенные приложения, обеспечивает безопасность и гибкость, а также упрощает чтение и понимание кода.
Работа с абсолютными путями
В Node.js на Windows абсолютные пути обозначаются с использованием диска и следующим за ним двоеточием:
C:\path\to\file.txt
Абсолютные пути начинаются с корня файловой системы и указывают полный путь к файлу или папке. Они не зависят от текущей директории и позволяют найти нужный ресурс независимо от места выполнения программы.
Для работы с абсолютными путями в Node.js существует модуль path
. Он обеспечивает удобные инструменты для работы с путями к файлам и директориям.
Пример использования модуля path
для работы с абсолютными путями:
const path = require('path');
const absolutePath = 'C:\\path\\to\\file.txt';
console.log(path.basename(absolutePath)); // выводит 'file.txt'
console.log(path.dirname(absolutePath)); // выводит 'C:\path\to'
console.log(path.extname(absolutePath)); // выводит '.txt'
console.log(path.isAbsolute(absolutePath)); // выводит 'true'
Функции basename
, dirname
и extname
позволяют получить имя файла, имя его директории и расширение файла соответственно. Функция isAbsolute
проверяет, является ли путь абсолютным.
Использование модуля path
позволяет легко работать с абсолютными путями в Node.js на Windows и обеспечивает переносимость кода между различными операционными системами.
Работа с относительными путями
В Node.js на Windows относительные пути используются для указания местоположения файлов и папок относительно текущей директории или других файлов. Знание работы с относительными путями может быть полезным при разработке и управлении файловой структурой проекта.
Относительные пути можно указывать в различных форматах:
- Относительный путь без ведущего слеша:
folder/file.js
- Относительный путь с ведущим слешем:
/folder/file.js
- Относительный путь с использованием двух точек:
../folder/file.js
В случае относительного пути без ведущего слеша, путь будет рассчитываться относительно текущей директории, в которой запущен Node.js.
Относительный путь с ведущим слешем будет рассчитываться относительно корневой директории диска, на котором запущен Node.js.
Относительный путь с использованием двух точек (../
) позволяет указывать местоположение файла или папки на уровень выше текущей директории.
Примеры относительных путей:
- Если текущая директория:
C:\projects\my-project
- Относительный путь
folder/file.js
будет указывать на файлC:\projects\my-project\folder\file.js
- Относительный путь
/folder/file.js
будет указывать на файлC:\folder\file.js
- Относительный путь
../folder/file.js
будет указывать на файлC:\projects\folder\file.js
При использовании относительных путей в Node.js на Windows, следует учитывать особенности операционной системы, такие как использование обратных слешей (\
) вместо прямых слешей (/
). Для корректной работы с относительными путями на Windows можно использовать функцию path.join()
модуля path
в Node.js.
Важно также помнить о регистронезависимости путей на Windows. При использовании относительных путей, следует учитывать регистр символов в пути. Например, путь Folder/file.js
и путь folder/file.js
будут указывать на разные файлы или папки.
Преобразование путей в Node.js на Windows
Windows и Unix-подобные операционные системы имеют разные механизмы для работы с путями к файлам и директориям. В Node.js, чтобы обеспечить совместимость с обеими системами, существует специальный метод для преобразования путей на Windows.
Если вы хотите использовать путь, который будет работать и на Windows, и на других платформах, вам следует использовать встроенный модуль path
в Node.js.
Методы модуля path
позволяют преобразовывать пути с использованием правильного разделителя и корректного формата. Например, если у вас есть путь C:\my\file.txt
, то на Unix-подобных системах он будет записываться как C:/my/file.txt
. Методы модуля path
автоматически обрабатывают эти различия и преобразуют пути в нужный формат.
Вот некоторые из наиболее используемых методов модуля path
для работы с путями на Windows:
Метод | Описание |
---|---|
path.join([...paths]) |
Соединяет пути в один. Автоматически корректирует разделители и формат пути. |
path.resolve([...paths]) |
Преобразует относительный путь в абсолютный. |
path.basename(path[, ext]) |
Возвращает имя файла из пути. Можно указать расширение файла для его удаления. |
path.dirname(path) |
Возвращает имя директории из пути. |
path.extname(path) |
Возвращает расширение файла из пути. |
path.normalize(path) |
Нормализует путь, удаляя избыточные разделители. |
path.parse(path) |
Разбирает путь на составные части (root, dir, base, ext, name). |
Используя данные методы модуля path
, разработчики могут без проблем работать с путями в Node.js на Windows, обеспечивая совместимость с другими операционными системами.
Node.js is an Open-Source and Cross-platform JavaScript runtime environment built on the V8 JavaScript engine – the core of google chrome. It is used to build highly performant and scalable applications and is an event-driven non-blocking I/O model.
Working with File Paths
Node.js is a Cross-platform which implies that an application developed in Node.js on OSX should be able to deploy it on Windows servers and Linux servers. Linux servers are similar to OSX as both are based on UNIX but Windows servers are a little different. For more information, check out Full Stack Development course.
Working with a file is one of the common most requirements like reading from a file, writing/updating to a file, etc. Some of the common file formats that are typically dealt with are importing or exporting data from/to JSON, Excel, CSV formats. To perform these operations, the Node.Js application has to deal with the filesystem of the Operating system in which the application is deployed. Node.js comes with an ‘fs’ module for dealing with files. But the most common issue to deal with supporting multiple operating systems is PATHS. As each operating system has its specific set of guidelines and if we dealt wrongly with them, then we are sure to run into problems.
For example, backward slash (‘\’) on windows would be a directory separator whereas the same on a Unix-based system is an escape character and the forward-slash (‘/’) is used for directory separator on Unix-based system. Though Windows supports forward slash, Microsoft suggests using a backward slash.
Another set of common requirements is dealing with newline characters. In a Unix-based system, ‘\n’ is used while some other platforms use \r and there are platforms like Windows which use both i.e., \n\r. And reading the file to support multiple platforms would mean that we have to come up with a complex regex or write conditional logic based on the platform at the expense of maintenance of the application.
Writing to temp directory while performing some complex computation is a common requirement as well along with reading files from the home directory. Node.js comes with another module called ‘os’ which helps to build a more cross-platform application.
Like End of Line (EOL) is obtained as require(‘os).EOL and require(‘os’).tmdir() to ensure the correct thing is done based on the platform.
Introduction to PATH Module
Node.js has a module called PATH to interact with file and directory paths. Node.js has a module called FS to interact with file and directory systems i.e., create, modify and delete while listing files. Both are meant for different purposes. FS assumes that the path provided is valid and performs the operations on the files. Unlike FS, the PATH module builds, parses an,d accesses papatth in the file system with the help of useful properties and methods.
Below is a snippet of code for accessing path module:
const path = require('path');
Node.js path module behavior varies based on the operating system i.e., Windows or POSIX. This implies that if the node.js application is running in windows it will work as per Windows-style paths and the same thing applicable on POSIX. Throughout the article, we will be covering Windows and POSIX separately with respective examples.
Path module has separate namespaces for windows and POSIX which helps in dealing the paths based on the corresponding platform.
Working with Path.basename
Path module has a basename method to get the file name part and usage of the same function in Windows and POSIX( I.e. Unix) differs.
On POSIX —
console.log(path.basename(' /temp/test.js')); // returns test.js console.log(path.basename(' /temp/test.js', ‘.js’)); // returns test – without the extension
// Wrong format i.e., backward slash is used
console.log(path.basename(' C:\\temp\\test.js')); // returns C:\temp\test.js
On WINDOWS —
console.log(path.basename('C:\\temp\\test.js')); // returns test.js
Node.js path can be used to get consistent results irrespective of Operating Systems with the help of specific implementation methods. To provide access to Windows-specific implementation of path methods, path.win32 to be used. It is accessible as require(‘path’).win32 or require(‘path/win32’).
Working with WINDOWS file paths on POSIX platform —
console.log(path.win32.basename('C:\\temp\test.js')); // returns 'test.js'
Similar for POSIX files paths, path.posix to be used. It is accessible as require(‘path’).posix or require(‘path/posix’).
Working with POSIX file paths on Windows platform —
console.log(path.posix.basename(' /temp/test.js')); // returns 'test'.js
Here is a full example on Unix machine based on path provided:
Steps:
- Create an index.js file and copy the below code.
const path = require('path'); console.log(path.basename('/temp/test.js')); console.log(path.win32.basename('C:\\temp\\test.js')); console.log(path.posix.basename('/temp/test.js'));
- Invoke a terminal and navigate to the directory of the index.js file location.
- Execute node index.js to see the below output.
Output:
/Users/.../.nvm/versions/node/v14.16.1/bin/node ./test.js test.js test.js:3 test.js test.js:4 test.js test.js:5
ON UNIX machine in POSIX path format:
const path = require('path'); console.log(path.basename('users/userName/desktop/test.js', '.js')); console.log(path.win32.basename('users/userName/desktop/test.js', '.js')); console.log(path.posix.basename('users/userName/desktop/test.js', '.js'));
Output:
test test.js:3 test test.js:4 test test.js:5
Path.basename takes an optional second argument which is the extension to get the file name without the extension.
const path = require('path'); console.log(path.basename('/temp/test.js', ‘.js’)); console.log(path.win32.basename('C:\\temp\\test.js', ‘.js’)); console.log(path.posix.basename('/temp/test.js', ‘.js’));
Path.basename method takes second argument as file extension to remove file extension but basename methods treats extension as case-sensitive.a
Console.log(path. basename ('/temp/test.JS', '.js')); // returns 'test.JS'
Note: If there is an invalid argument of different type other than string is sent then TypeError is thrown.
The below set of examples can be executed by following below steps:
- Open the terminal.
- Run node to switch to REPL env.
- Copy line by line to see the output mentioned.
Working with Path.resolve
Resolve method helps to resolve multiple path segments into an absolute path. Below are few examples.
Joining paths:
> path.resolve('/foo/bar', './baz') '/foo/bar/baz' > path.resolve('/foo/bar', '../baz') '/foo/baz' > path.resolve('/foo/bar', '/baz') '/baz'
Note: Per-drive working directory concept is followed by node.js on windows. For ex: path.resolve(‘c:\\’) might give different result to path.resolve(‘c:’). Reference
> path.win32.resolve('c:\\') 'c:\\' > path.win32.resolve('c:') 'c:\\Users\\[userName]’
There is a disparity in the path.delimiter based on the platform. In case of WINDOWS, it is semi-colon (;) and in POSIX is colon (:).
Path segment separator also differs based on the platform. For Windows, path.sep is ‘\’ and for POSIX it is ‘/’.
> path.win32.delimiter ';' > path.posix.delimiter ':' > path.win32.sep '\\' > path.posix.sep '/' >
Working with Path.dirname
Path.dirname is a helper method to get the parent directory for the given path.
> path.dirname('desktop/test.js') 'desktop'
Working with Path.extname
Path.extname gives the extension of the path based on the last occurrence of the (.) period character ignoring the first character in the path. Below are the different variations of the method:
> path.extname('test.js') '.js' > path.extname('sample.test.js') '.js' > path.extname('test.') '.' > path.extname('.js') '' > path.extname('test') '' > path.extname('test..js') '.js' > path.extname('test.js.') '.' >
Working with Path.format and path.parse
Path.format and path.parse are just two sides of the coin which does opposite. Path.format takes an object and returns a path string whereas path.parse takes a path string and returns an object.
Let’s understand the pathObject Object and its properties. It is a JavaScript object with the below properties:
- dir <string>
- root <string>
- base <string>
- name <string>
- ext <string>
Each property has a specific priority and higher priority property overrides the lower one.
- pathObject.dir has higher priority when compared to pathObject.root and if it is provided then pathObject.root is ignored.
- path.base has higher priority when compared to pathObject.ext and pathObject.name. Path.base is considered over pathObject.ext and pathObject.name.
Before proceeding further, you can enroll in Web Development courses list to advance in your career. Here is the path string returned for a given pathObject.
`${pathObject.dir}${pathObject.sep}${pathObject.base}`
or
`${pathObject.root}${pathObject.sep}${pathObject.name}${pathObject.ext}`
Please follow the below steps to follow through.
- Create an example.js file
- Open the terminal and navigate to folder of example.js.
- Copy code snippet from the example
- Make sure to clear the content before proceeding with next one.
- Run node example.js to view the expected output.
Note: Below examples are verified in Unix machine but should be working in other OS as well.
Sample example of path.format
Let’s understand with few examples
const path = require('path'); console.log(path.format({ dir: '/home/user/dir', root: '/ignored', base: 'file.txt' } )); // returns -> /home/user/dir/file.txt console.log(path.format({ dir: '/home/user/dir', base: 'file.txt', name: '/ignored', ext: '/ignored' } )); // returns -> /home/user/dir/file.txt console.log(path.format({ dir: '/home/user/dir', name: 'file', ext: '.txt' } )); // returns -> /home/user/dir/file.txt console.log(path.format({ root: '/home/user/dir', name: '/file', ext: '.txt' } )); // returns -> /home/user/dir/file.txt
On executing node index.js should return the expected output.
As we have seen in the above examples, all of them return same result with different properties in pathObject. Let’s take the same output string and check the pathObject returned if we pass it to path.parse method.
Sample example of path.parse
On POSIX platform:
const path = require('path'); console.log(path.parse('/home/user/dir/file.txt'));
Output:
{root: '/', dir: '/home/user/dir', base: 'file.txt', ext: '.txt', name: 'file'}
From the output it is evident that base is a combination of ext and name properties. And root is root path with rest of the directory path is set to dir property.
- root: ‘/’,
- dir: ‘/home/user/dir’,
- base: ‘file.txt’,
- ext: ‘.txt’,
- name: ‘file’
On Windows Platform:
const path = require('path'); console.log(path.parse('c:\\path\\dir\\file.txt’));
Output:
{root: 'c:\\', dir: 'c:\\path\\dir', base: 'file.txt', ext: '.txt', name: 'file'}
PathObject’s root property corresponds to the diver in windows and dir to the root directory of the file given. Base property is a combination of ext and name as in POSIX platform.
- root: ‘c:\\’,
- dir: ‘c:\\path\\dir’,
- base: ‘file.txt’,
- ext: ‘.txt’,
- name: ‘file’
Working with Path.normalize
Path.normalize is another method helpful for normalizing the path by resolving ‘..’ and ‘.’ segments.
const path = require('path'); console.log(path.normalize('/home/user/dir/..')); console.log(path.normalize('/home/./user/dir/.././')); console.log(path.normalize('/home/./user/dir/..//////./'));
Output:
/home/user /home/user/ /home/user/
In the last example, normalize has replaced the multiple instances of path segment separates with single instance of path segment separator specific to the platform.
Are you ready to unlock the power of Python? Join our Python course and become a coding wizard in no time! Don’t miss out on this opportunity to learn one of the most versatile and in-demand programming languages. Enroll now and take your skills to the next level.
Working with Path.join
Path.join takes an array of path segments and joins them together using the platform-specific separator and performs normalization on the resulting path. This method is more reliable when compared to string concatenation because of extra caution to be taken for supporting multiple platforms.
const path = require('path'); console.log(path.join('/home', '/user', 'subdir', '/dir/', '/..'));
Output:
/home/user/subdir
Let’s decode how the output is obtained.
Step1 – all parameters are concatenated with a path separator in between each parameter based on platform-specific path segment separator.
/home//user/subdir//dir///..'
Step2 – Normalization is happened i.e., multiple instances of path segment separator are replaced with single instance.
/home/user/subdir/dir/..'
Sept 3 — And ‘..’ segments are resolved.
/home/user/subdir'
Exploring the Path Further
We’ve seen how we can use the path module and what we must be careful of and what differences we are likely to see in the functioning of the path module on different operating systems.
There is a lot more to the Path module than what we have covered in this short article. The Path module is used with FS and OS module most of the time, and if you are interested in reading more about it, you should go through the official documentation too.https://nodejs.org/api/path.html.
About
NODE_PATH is:
-
that contains a search path value (one or more directory with the linux or windows path separator)
-
Additionally, Node.js will search in the following list of GLOBAL_FOLDERS:
-
1: HOME/.node_modules
-
2: HOME/.node_libraries
-
3: PREFIX/lib/node (PREFIX is Node.js’s configured node_prefix.)
-
How to change it programmatically ?
let path = require("path");
// New search path
let absolutePathToModule1 = path.resolve("./path/to/module1");
let absolutePathToModule2 = path.resolve("./path/to/module2");
let nodeSearchPaths = absolutePathToModule1+path.delimiter+absolutePathToModule2;
// Overwrite and implements
if(typeof process.env.NODE_PATH !== 'undefined'){
process.env.NODE_PATH = process.env.NODE_PATH + path.delimiter + nodeSearchPaths ;
} else {
process.env.NODE_PATH = nodePaths;
}
require("module").Module._initPaths();
Be aware that your test environment may implement its own module loader and may not respond to this hack.
This is the case of Jest for instance where you should set the modulepaths
How to change it at start in package.json ?
In package.json, you need to set it up in:
-
the script node
-
with the cross-env cli to support linux and windows
Example:
"scripts": {
"dev": "cross-env NODE_PATH=./my/module/home/directory main.js",
}
How to split it / filter / map
process.env.NODE_PATH = (process.env.NODE_PATH || '')
.split(path.delimiter)
.filter(folder => folder && !path.isAbsolute(folder))
.map(folder => path.resolve(appDirectory, folder))
.join(path.delimiter);
Syntax
The syntax is the same than PATH environment variable (search path for executable)
-
Linux
NODE_PATH=path[:…]
-
Windows
NODE_PATH=path[;…]
Documentation / Reference
Source Code:lib/path.js
Модуль node:path
предоставляет утилиты для работы с путями к файлам и каталогам. Доступ к нему можно получить с помощью:
const path = require('node:path');
Windows против POSIX
Работа модуля node:path
по умолчанию зависит от операционной системы, в которой работает приложение Node.js. В частности, при работе в операционной системе Windows модуль node:path
предполагает, что используются пути в стиле Windows.
Таким образом, использование path.basename()
может привести к разным результатам yield на POSIX и Windows:
On POSIX:
path.basename('C:\\temp\\myfile.html'); // Returns: 'C:\\temp\\myfile.html'
On 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 без обратной косой черты. Например, path.resolve('C:\\')
потенциально может возвращать результат, отличный от path.resolve('C:')
. Для получения дополнительной информации см. this MSDN page .
path.basename(path[, suffix])
Version | Changes |
---|---|
v6.0.0 |
Передача не-строки в качестве аргумента |
v0.1.25 |
Добавлено: v0.1.25 |
-
path
<string> -
suffix
Необязательный суффикс для удаления. - Returns: <string>
Метод path.basename()
возвращает последнюю часть path
, аналогично команде Unix basename
. Завершающий directory separators игнорируется.
path.basename('/foo/bar/baz/asdf/quux.html'); // Returns: 'quux.html' path.basename('/foo/bar/baz/asdf/quux.html', '.html'); // Returns: 'quux'
Хотя Windows обычно обрабатывает имена файлов, включая расширения файлов, без учета регистра, эта функция этого не делает. Например, C:\\foo.html
и C:\\foo.HTML
относятся к одному и тому же файлу, но basename
рассматривает расширение как строку с учетом регистра:
path.win32.basename('C:\\foo.html', '.html'); // Returns: 'foo' path.win32.basename('C:\\foo.HTML', '.html'); // Returns: 'foo.HTML'
TypeError
выдается, если path
не является строкой или если задан suffix
, который не является строкой.
path.delimiter
Добавлено: v0.9.3
- <string>
Предоставляет разделитель path для конкретной платформы:
-
;
для Windows - В1482В для 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']
On 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)
Version | Changes |
---|---|
v6.0.0 |
Передача не-строки в качестве аргумента |
v0.1.16 |
Добавлено: v0.1.16 |
-
path
<string> - Returns: <string>
Метод path.dirname()
возвращает имя каталога path
, аналогично команде Unix dirname
. Завершающие разделители каталогов игнорируются, см. path.sep
.
path.dirname('/foo/bar/baz/asdf/quux'); // Returns: '/foo/bar/baz/asdf'
TypeError
выдается, если path
не является строкой.
path.extname(path)
Version | Changes |
---|---|
v6.0.0 |
Передача не-строки в качестве аргумента |
v0.1.25 |
Добавлено: v0.1.25 |
-
path
<string> - Returns: <string>
Метод 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.extname('.index.md'); // Returns: '.md'
TypeError
выдается, если path
не является строкой.
path.format(pathObject)
Version | Changes |
---|---|
v19.0.0 |
Точка будет добавлена, если она не указана в |
v0.11.15 |
Добавлено: v0.11.15 |
-
pathObject
Любой объект JavaScript, имеющий следующие свойства:-
dir
<string> -
root
<string> -
base
<string> -
name
<string> -
ext
<string>
-
- Returns: <string>
Метод path.format()
возвращает строку path из объекта. Это противоположность К1482К.
При предоставлении свойств pathObject
помните, что существуют комбинации, в которых одно свойство имеет приоритет над другим:
-
pathObject.root
игнорируется, если указанpathObject.dir
. -
pathObject.ext
иpathObject.name
игнорируются, если существуетpathObject.base
.
Например, на POSIX:
path.format({ root: '/ignored', dir: '/home/user/dir', base: 'file.txt' }); path.format({ root: '/', base: 'file.txt', ext: 'ignored' }); path.format({ root: '/', name: 'file', ext: '.txt' }); path.format({ root: '/', name: 'file', ext: 'txt' });
On Windows:
path.format({ dir: 'C:\\path\\dir', base: 'file.txt' }); // Returns: 'C:\\path\\dir\\file.txt'
path.isAbsolute(path)
Добавлено: v0.11.2
-
path
<string> - Returns: <boolean>
Метод path.isAbsolute()
определяет, является ли path
абсолютным path.
Если данный path
представляет собой строку нулевой длины, будет возвращено false
.
Например, на POSIX:
path.isAbsolute('/foo/bar'); // true path.isAbsolute('/baz/..'); // true path.isAbsolute('qux/'); // false path.isAbsolute('.'); // false
On 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
TypeError
выдается, если path
не является строкой.
path.join([...paths])
Добавлено: v0.1.16
-
...paths
Последовательность сегментов path. - Returns: <string>
Метод path.join()
объединяет все заданные сегменты path
вместе, используя разделитель, зависящий от платформы, в качестве разделителя, а затем нормализует полученный path.
Сегменты path
нулевой длины игнорируются. Если объединенная строка path представляет собой строку нулевой длины, то будет возвращен '.'
, представляющий текущий рабочий каталог.
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..'); path.join('foo', {}, 'bar');
TypeError
генерируется, если какой-либо из сегментов path не является строкой.
path.normalize(path)
Добавлено: v0.1.23
-
path
<string> - Returns: <string>
Метод path.normalize()
нормализует данные path
, разрешая сегменты '..'
и '.'
.
Если обнаружено несколько последовательных символов разделения сегментов path: (e.g. /
на POSIX и \
или /
на Windows),, они заменяются одним экземпляром разделителя сегментов path для конкретной платформы ( /
на POSIX и \
на Windows). Конечные разделители сохраняются.
Если path
представляет собой строку нулевой длины, возвращается '.'
, представляющий текущий рабочий каталог.
Например, на POSIX:
path.normalize('/foo/bar//baz/asdf/quux/..'); // Returns: '/foo/bar/baz/asdf'
On Windows:
path.normalize('C:\\temp\\\\foo\\bar\\..\\'); // Returns: 'C:\\temp\\foo\\'
Поскольку Windows распознает несколько разделителей path, оба разделителя будут заменены экземплярами предпочтительного разделителя Windows ( \
):
path.win32.normalize('C:////temp\\\\/\\/\\/foo/bar'); // Returns: 'C:\\temp\\foo\\bar'
TypeError
выдается, если path
не является строкой.
path.parse(path)
Добавлено: v0.11.15
-
path
<string> - Returns: <Object>
Метод path.parse()
возвращает объект, свойства которого представляют собой важные элементы path
. Завершающие разделители каталогов игнорируются, см. path.sep
.
Возвращенный объект будет иметь следующие свойства:
-
dir
<string> -
root
<string> -
base
<string> -
name
<string> -
ext
<string>
Например, на 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.)
On 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
Version | Changes |
---|---|
v15.3.0 |
Выставлен как |
v0.11.15 |
Добавлено: v0.11.15 |
- <Object>
Свойство path.posix
обеспечивает доступ к конкретным реализациям методов path
POSIX.
Доступ к API осуществляется через require('node:path').posix
или require('node:path/posix')
.
path.relative(from, to)
Version | Changes |
---|---|
v6.8.0 |
В Windows ведущие косые черты путей UNC теперь включаются в возвращаемое значение. |
v0.5.0 |
Добавлено: v0.5.0 |
-
from
<string> -
to
<string> - Returns: <string>
Метод path.relative()
возвращает относительный path от from
до to
на основе текущего рабочего каталога. Если from
и to
разрешаются в один и тот же path (после вызова path.resolve()
на each), возвращается строка нулевой длины.
Если строка нулевой длины передается как from
или to
, вместо строк нулевой длины будет использоваться текущий рабочий каталог.
Например, на POSIX:
path.relative('/data/orandea/test/aaa', '/data/orandea/impl/bbb'); // Returns: '../../impl/bbb'
On Windows:
path.relative('C:\\orandea\\test\\aaa', 'C:\\orandea\\impl\\bbb'); // Returns: '..\\..\\impl\\bbb'
TypeError
выдается, если from
или to
не является строкой.
path.resolve([...paths])
Добавлено: v0.3.4
-
...paths
Последовательность сегментов path или path. - Returns: <string>
Метод path.resolve()
преобразует последовательность сегментов path или path в абсолютный path.
Данная последовательность path обрабатывается справа налево, с добавлением каждого последующего path
до тех пор, пока не будет построен абсолютный path. Например, учитывая последовательность сегментов path: /foo
, /bar
, baz
, вызов path.resolve('/foo', '/bar', 'baz')
вернет /bar/baz
, поскольку 'baz'
не является абсолютным path, а '/bar' + '/' + 'baz'
.
Если после обработки всех заданных сегментов path
абсолютный path еще не был сгенерирован, используется текущий рабочий каталог.
Полученный path нормализуется, а косые черты в конце удаляются, если path не разрешается в корневой каталог.
Сегменты path
нулевой длины игнорируются.
Если сегменты path
не переданы, path.resolve()
вернет абсолютный path текущего рабочего каталога.
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
Добавлено: v0.7.9
- <string>
Предоставляет разделитель сегментов path для конкретной платформы:
-
\
в Windows -
/
на POSIX
Например, на POSIX:
'foo/bar/baz'.split(path.sep); // Returns: ['foo', 'bar', 'baz']
On Windows:
'foo\\bar\\baz'.split(path.sep); // Returns: ['foo', 'bar', 'baz']
В Windows как прямая косая черта ( /
), так и обратная косая черта ( \
) принимаются как разделители сегментов path; однако методы path
добавляют только обратную косую черту ( \
).
path.toNamespacedPath(path)
Добавлено: v9.0.0
-
path
<string> - Returns: <string>
Только в системах Windows возвращает эквивалент namespace-prefixed path для данного path
. Если path
не является строкой, path
будет возвращен без изменений.
Этот метод имеет смысл только в системах Windows. В системах POSIX этот метод не работает и всегда возвращает path
без изменений.
path.win32
Version | Changes |
---|---|
v15.3.0 |
Представлен как |
v0.11.15 |
Добавлено: v0.11.15 |
- <Object>
Свойство path.win32
обеспечивает доступ к реализациям методов path
, специфичным для Windows.
Доступ к API осуществляется через require('node:path').win32
или require('node:path/win32')
.
© 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/api/path.html