Поиск по сайту:

Как использовать __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 в своем терминале:

  1. mkdir dirname-example

Перейдите в каталог проекта:

  1. cd dirname-example

Инициализируйте его как проект Node.js:

  1. 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"

Затем запустите скрипт:

  1. node src/api/controller.js

Создайте и отредактируйте hello.js в каталоге cronjobs:

console.log(__dirname)     // "/Users/Sam/dirname-example/cronjobs"
console.log(process.cwd()) // "/Users/Sam/dirname-example"

Затем запустите скрипт:

  1. 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.