Как работает переменная __dirname в Node.js
Development, Java | Комментировать запись
__dirname — это переменная, которая указывает абсолютный путь к каталогу, содержащему текущий исполняемый файл.
Из этого руководства вы узнаете, как использовать __dirname в проектах Node.js.
Требования
Чтобы следовать руководству, вам понадобятся базовые знания по Node.js. Чтобы узнать больше о Node.js, читайте другие наши статьи из этого раздела.
Мы проверяли это руководство на Node.js v17.2.0 и npm v8.2.0.
1: Создание тестового проекта
Для того чтобы разобраться в работе __dirname, в этом руководстве мы будем использовать следующий образец структуры каталогов:
dirname-example ├──index.js ├──public ├──src │ ├──helpers.js │ └──api │ └──controller.js ├──cronjobs │ └──hello.js └──package.json
Начните с создания каталога dirname-example:
$ mkdir dirname-example
Перейдите в каталог проекта:
$ cd dirname-example
Запустите его как проект Node.js:
$ npm init --yes
Теперь создадим каталоги и файлы, с которыми будем экспериментировать.
2: Использование __dirname
Используйте __dirname, чтобы проверить, в каких каталогах находятся ваши файлы.
Давайте создадим и отредактируем файл controller.js в подкаталоге api, в каталоге src:
console.log(__dirname) // "/Users/8host/dirname-example/src/api" console.log(process.cwd()) // "/Users/8host/dirname-example"
Затем запустим скрипт:
$ node src/api/controller.js
В каталоге cronjobs создадим следующий файл hello.js:
console.log(__dirname) // "/Users/8host/dirname-example/cronjobs" console.log(process.cwd()) // "/Users/8host/dirname-example"
И запустим этот скрипт:
$ node cronjobs/hello.js
Обратите внимание, __dirname имеет разные значения в зависимости от того, с каким файлом вы работаете.
Метод process.cwd() также возвращает значения, но виде каталогов проекта. Переменная __dirname всегда возвращает абсолютный путь к месту расположения ваших файлов.
3: Работа с каталогами
Из этого раздела вы узнаете, как использовать __dirname, чтобы создавать новые каталоги, указывать на них, а также добавлять новые файлы.
Создание каталогов
Чтобы создать новый каталог в файле index.js, вставим __dirname в качестве первого аргумента функции path.join(), а имя нового каталога в качестве второго:
const fs = require('fs'); const path = require('path'); const dirPath = path.join(__dirname, '/pictures'); fs.mkdirSync(dirPath);
Вызвав метод mdirSync(), мы создали новый каталог, pictures, который содержит __dirname в качестве абсолютного пути.
Указание на каталоги
Еще одна уникальная функция — возможность указывать на каталоги. Давайте заявим в index.js переменную и предадим ей значение __dirname в качестве первого аргумента функции path.join(), а каталог, содержащий статические файлы, в качестве второго:
express.static(path.join(__dirname, '/public'));
Так мы говорим Node.js использовать __dirname для указания на каталог public, содержащий статические файлы.
Добавление файлов в каталог
Также можно добавлять файлы в уже существующий каталог. В файле index.js объявим переменную и включим __dirname в качестве первого аргумента, а файл, который собираемся добавить, в качестве второго:
const fs = require('fs'); const path = require('path'); const filePath = path.join(__dirname, '/pictures'); fs.openSync(filePath, 'hello.jpeg');
Использование метода openSync() добавит файл, если он еще не существует в выбранном каталоге.
Заключение
Node.js позволяет создавать каталоги, указывать на них и добавлять файлы в уже существующие каталоги при помощи модульной переменной среды.
Рекомендуем также ознакомиться с документацией по Node.js для __dirname и руководством по использованию __dirname в среде Express.js.
Tags: Node.js