В Node.js для выполнения внешних команд, таких как запуск и остановка приложений, можно использовать модуль child_process. Внутри этого модуля доступно несколько методов для запуска внешних процессов, включая exec и spawn.
Метод exec выполняет команду в оболочке операционной системы и передает результат выполнения в колбэк-функцию. Он подходит, когда нам не требуется получать данные из вывода команды в реальном времени. Чтобы запустить приложение с помощью команды npm, вы можете использовать следующий код:
const { exec } = require('child_process'); exec('npm start', (error, stdout, stderr) => { if (error) { console.error(`Ошибка выполнения команды: ${error.message}`); return; } if (stderr) { console.error(`Ошибка при запуске приложения: ${stderr}`); return; } console.log(`Приложение успешно запущено:n${stdout}`); });
Метод spawn, в отличие от exec, создает новый процесс и устанавливает каналы связи для ввода/вывода/ошибок. Это позволяет нам получать данные из вывода команды в реальном времени. Например, чтобы запустить приложение с помощью команды npm, и получить его вывод в реальном времени, вы можете использовать следующий код:
const { spawn } = require('child_process'); const child = spawn('npm', ['start']); child.stdout.on('data', (data) => { console.log(`Вывод приложения: ${data}`); }); child.stderr.on('data', (data) => { console.error(`Ошибка при запуске приложения: ${data}`); }); child.on('error', (error) => { console.error(`Ошибка выполнения команды: ${error.message}`); }); child.on('close', (code) => { console.log(`Приложение завершило работу с кодом ${code}`); });
В этом примере мы создаем новый процесс, передавая команду "npm" и аргумент "start" в функцию spawn. Затем мы прослушиваем события stdout, stderr и error, чтобы обработать вывод приложения и ошибки, связанные с его выполнением. Наконец, мы прослушиваем событие close для обработки завершения работы приложения и получения его кода завершения.
При остановке приложения с помощью команды npm вы можете использовать метод kill(), чтобы отправить сигнал остановки:
const { exec } = require('child_process'); exec('npm run stop', (error, stdout, stderr) => { if (error) { console.error(`Ошибка выполнения команды: ${error.message}`); return; } if (stderr) { console.error(`Ошибка при остановке приложения: ${stderr}`); return; } console.log(`Приложение успешно остановлено:n${stdout}`); });
Обратите внимание, что в команде использовано "npm run stop", чтобы выполнить скрипт с именем "stop" из файла package.json вашего приложения.