Как использовать __dirname в Node.js
Введение
__dirname
— это переменная среды, которая сообщает вам абсолютный путь к каталогу, содержащему исполняемый в данный момент файл.
В этой статье вы узнаете, как реализовать __dirname
в своем проекте Node.js.
Предпосылки
Для выполнения этого урока вам понадобятся:
- Общие знания Node.js. Чтобы узнать больше о Node.js, ознакомьтесь с нашей серией статей «Как программировать в Node.js».
Это руководство было проверено с помощью Node.js версии 17.2.0 и npm
версии 8.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/Sam/dirname-example/src/api"
console.log(process.cwd()) // "/Users/Sam/dirname-example"
Затем запустите скрипт:
- node src/api/controller.js
Создайте и отредактируйте hello.js
в каталоге cronjobs
:
console.log(__dirname) // "/Users/Sam/dirname-example/cronjobs"
console.log(process.cwd()) // "/Users/Sam/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);
Теперь вы создали новый каталог pictures
после вызова метода mdirSync()
, который содержит __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 предоставляет вам возможность создавать каталоги и указывать на них. И добавьте файлы в существующие каталоги с модульной переменной среды.
Для дальнейшего чтения ознакомьтесь с __dirname
в среде Express.js.