Node.js

Как в Node.js перейти в папку: cd, process.cwd и process.chdir

Короткий ответ: если вы хотите перейти в папку перед запуском проекта, используйте cd в терминале. Если нужно сменить рабочую директорию внутри уже запущенной Node.js-программы, используйте process.chdir(). Но Node.js не может поменять папку внешнего терминала после завершения скрипта

Эта тема часто путает новичков, потому что слово “перейти” может означать разные вещи: открыть папку проекта в терминале, прочитать файл из другой папки, изменить текущую рабочую директорию процесса или собрать правильный путь к файлу

Переход в папку перед запуском

Обычный вариант выглядит так

cd my-node-project
node index.js

Команда cd выполняется в терминале, а не в Node.js. После нее терминал находится внутри папки проекта, и команда node index.js ищет файл именно там

Проверить текущую папку можно так

pwd
Get-Location

Как узнать текущую папку в Node.js

Внутри JavaScript-кода используйте process.cwd()

console.log("Рабочая папка:", process.cwd());

cwd означает current working directory — текущая рабочая директория процесса. Обычно это папка, из которой вы запустили команду node

Пример

cd my-node-project
node index.js

В этом случае process.cwd() покажет путь к my-node-project

Как сменить папку внутри Node.js

Для смены рабочей директории процесса есть process.chdir()

process.chdir("data");

console.log("Теперь рабочая папка:", process.cwd());

Если папки data нет, будет ошибка. Поэтому лучше обработать исключение

try {
  process.chdir("data");
  console.log("Папка изменена:", process.cwd());
} catch (error) {
  console.error("Не удалось перейти в папку:", error.message);
}

Важно: эта смена действует только внутри текущего Node.js-процесса. Когда скрипт закончится, ваш терминал не окажется в папке data

Почему Node.js не меняет папку терминала

Если написать скрипт

process.chdir("data");

И запустить его

node index.js

После завершения скрипта терминал останется там, где был. Это нормально. Дочерний процесс не может изменить рабочую директорию родительской оболочки

Если нужно перейти в папку для дальнейших команд, делайте это в терминале через cd

Когда лучше не использовать process.chdir

Во многих проектах лучше не менять рабочую директорию, а собирать абсолютные пути через path.join и __dirname

const path = require("path");
const fs = require("fs");

const filePath = path.join(__dirname, "data", "users.json");
const content = fs.readFileSync(filePath, "utf8");

console.log(content);

__dirname — это папка, где лежит текущий файл. Такой код стабильнее, потому что он не зависит от того, из какой папки вы запустили node

Разница между process.cwd и __dirname

Пример структуры

project/
  index.js
  src/
    script.js

Если из папки project запустить

node src/script.js

То внутри script.js

console.log(process.cwd());
console.log(__dirname);

process.cwd() покажет папку project, а __dirname покажет папку project/src. Это разные вещи, и путаница между ними часто ломает чтение файлов

Мини-практика

Создайте папку data, положите в нее message.txt, а затем прочитайте файл двумя способами: сначала через process.chdir("data"), потом через path.join(__dirname, "data", "message.txt")

После этого запустите скрипт из другой папки и посмотрите, какой вариант оказался надежнее

Частые ошибки

Пишут cd внутри JavaScript-файла cd — команда терминала, а не JavaScript. В коде используйте process.chdir() или path.join

Думают, что process.chdir изменит папку терминала Нет, он меняет рабочую директорию только для текущего Node.js-процесса

Путают process.cwd и __dirname process.cwd() зависит от места запуска команды, __dirname зависит от места расположения файла

Собирают пути строкой через слеши Используйте path.join, особенно если код должен работать на Windows и Linux

Что почитать дальше по Node.js

Если нужен общий маршрут по теме, откройте рубрику Node.js. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x