13

Как получить путь к текущему скрипту в Node.js?

26

Как получить путь к скрипту в Node.js?

Я знаю, что есть process.cwd(), но он возвращает лишь директорию, из которой был вызван скрипт, а не директорию самого скрипта. Например, если я находюсь в /home/kyle/ и выполняю следующую команду:

node /home/kyle/some/dir/file.js

Если я вызову process.cwd(), я получу /home/kyle/, а не /home/kyle/some/dir/. Есть ли способ получить именно эту директорию?

5 ответ(ов)

3

В общем, вы можете сделать так:

fs.readFile(path.resolve(__dirname, 'settings.json'), 'UTF-8', callback);

Используйте resolve(), вместо того чтобы конкатенировать с '/' или '\', иначе вы столкнетесь с проблемами совместимости между платформами.

Примечание: __dirname — это локальный путь к модулю или включенному скрипту. Если вы пишете плагин, которому нужно знать путь к основному скрипту, вы можете воспользоваться:

require.main.filename

или, чтобы просто получить имя папки:

require('path').dirname(require.main.filename)
1

В ответ на ваш вопрос: Используйте __dirname!!

__dirname

Это имя директории текущего модуля. Он равен path.dirname() для __filename.

Пример: если вы выполните команду node example.js из директории /Users/mjr, то:

console.log(__dirname);
// Выводит: /Users/mjr
console.log(path.dirname(__filename));
// Выводит: /Users/mjr

Для получения пути к директории в ESModules вам следует использовать: import.meta.url

import { fileURLToPath } from 'url';
import path from 'path';

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

console.log(__dirname);
// Выводит: директория текущего модуля
console.log(path.dirname(__filename));
// Выводит: директория текущего модуля, то же самое, что и __dirname

Дополнительную информацию вы можете найти в документации Node.js.

1

Этот код возвращает текущую директорию:

var currentPath = process.cwd();

Например, чтобы использовать этот путь для чтения файла, вы можете сделать следующее:

var fs = require('fs');
fs.readFile(process.cwd() + "\\text.txt", function(err, data) {
    if(err)
        console.log(err);
    else
        console.log(data.toString());
});

Здесь мы используем process.cwd() для получения пути к текущей директории, а затем соединяем его с именем файла text.txt, чтобы прочитать содержимое этого файла с помощью модуля fs. Если возникает ошибка, она выводится в консоль, иначе выводится содержимое файла в строковом формате.

0

В данном фрагменте кода происходит чтение и парсинг JSON-файла settings.json, который расположен в директории скрипта. Вот по шагам, что делает этот код:

  1. require('fs') - подключает встроенный модуль fs, который предоставляет функциональность работы с файловой системой.
  2. require('path') - подключает модуль path, помогающий работать с путями к файлам.
  3. path.resolve(__dirname, 'settings.json') - формирует абсолютный путь к файлу settings.json, используя текущую директорию (__dirname).
  4. fs.readFileSync(..., 'utf8') - синхронно читает содержимое файла по указанному пути и возвращает текстовое содержимое в кодировке UTF-8.
  5. JSON.parse(...) - парсит строку JSON в JavaScript-объект.

В результате переменная settings будет содержать объект JavaScript, представляющий данные из файла settings.json.

Пример того, как это можно было бы написать на русском:

var настройки = 
    JSON.parse(
        require('fs').readFileSync(
            require('path').resolve(
                __dirname, 
                'настройки.json'),
            'utf8'));

Не забудьте, что использование readFileSync блокирует выполнение кода до завершения чтения файла. Если файл большой или операции выполняются часто, рассмотрите возможность применения асинхронного подхода с fs.readFile.

0

В каждой программе на Node.js существуют глобальные переменные в ее среде, которые представляют собой информацию о вашем процессе. Одной из таких переменных является __dirname. Эта переменная содержит путь к директории, в которой находится текущий исполняемый файл, и может быть полезна для работы с файловой системой, позволяя вам легко получать доступ к ресурсам, расположенным относительно текущего файла.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь