Как работает переменная __dirname в Node.js

__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:

Добавить комментарий