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. Для соседних задач пригодятся эти разборы:
- Node.js + MongoDB: первая коллекция из приложения
- Node.js + MySQL: REST API для первых данных
- Node.js LTS: какую версию ставить новичку
- Node.js выводит странные имена файлов: как исправить кодировку и пути