Выполнение команд оболочки в Node.js: методы и примеры

Для выполнения команд оболочки с помощью Node.js вы можете использовать различные методы. Вот несколько подходов:

  1. Модуль child_process: Node.js предоставляет модуль child_process, который позволяет создавать дочерние процессы и выполнять команды оболочки. Вы можете использовать функции execили execSyncдля запуска команд оболочки. Вот пример:
const { exec } = require('child_process');
// Execute a shell command
exec('ls -l', (error, stdout, stderr) => {
  if (error) {
    console.error(`Error: ${error.message}`);
    return;
  }
  if (stderr) {
    console.error(`Command execution error: ${stderr}`);
    return;
  }
  console.log(`Command output: ${stdout}`);
});
  1. Метод spawn. Метод spawnиз модуля child_processпозволяет выполнять команды асинхронно с потоковым выводом. Вот пример:
const { spawn } = require('child_process');
// Execute a shell command
const ls = spawn('ls', ['-l']);
// Listen to the command output
ls.stdout.on('data', (data) => {
  console.log(`Command output: ${data}`);
});
// Handle any errors
ls.on('error', (error) => {
  console.error(`Error: ${error.message}`);
});
// Handle the command's exit event
ls.on('close', (code) => {
  console.log(`Command exited with code ${code}`);
});
  1. Пакет execa: Пакет execa— это популярная сторонняя библиотека, предоставляющая простой и современный способ выполнения команд оболочки. Он предлагает дополнительные функции, такие как API-интерфейсы на основе обещаний и кроссплатформенную совместимость. Вы можете установить его с помощью npm или Yarn и использовать следующим образом:
const execa = require('execa');
// Execute a shell command using execa
execa.command('ls -l')
  .then((result) => {
    console.log(`Command output: ${result.stdout}`);
  })
  .catch((error) => {
    console.error(`Error: ${error.message}`);
  });

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