Node.js è potentissimo, ma a volte hai bisogno di eseguire un comando o uno script esterno che non è scritto in JavaScript. Il modulo nativo `child_process` ti permette di creare processi figli ed eseguire comandi di sistema direttamente dalla tua applicazione Node.js.
Quando Usare `child_process`?
- Per eseguire utility a riga di comando (es. `git`, `ffmpeg`, `imagemagick`).
- Per lanciare script scritti in altri linguaggi, come Python, per compiti di data science o automazione.
- Per parallelizzare il lavoro, delegando compiti ad alta intensità di CPU a processi separati per non bloccare l'event loop principale.
Le Funzioni Principali
Il modulo offre diverse funzioni, ma le più comuni sono `exec`, `spawn` e le loro varianti sincrone.
`exec()`
La funzione `exec` esegue un comando in una shell e bufferizza l'output. È ottima per comandi semplici che restituiscono una piccola quantità di dati.
const { exec } = require('child_process');
exec('ls -lh', (error, stdout, stderr) => {
if (error) {
console.error(`Errore: ${error.message}`);
return;
}
if (stderr) {
console.error(`stderr: ${stderr}`);
return;
}
console.log(`stdout:\n${stdout}`);
});
`spawn()`
`spawn` è più potente e adatta per comandi che potrebbero restituire grandi quantità di dati. Invece di bufferizzare l'output, `spawn` restituisce degli streams per `stdout` e `stderr`. Questo ti permette di processare i dati in "pezzi" man mano che arrivano, in modo molto più efficiente in termini di memoria.
const { spawn } = require('child_process');
const ls = spawn('ls', ['-lh', '/usr']);
ls.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
ls.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
});
Una Nota sulla Sicurezza
Fai molta attenzione quando costruisci comandi usando l'input dell'utente. Per evitare vulnerabilità di "Command Injection", non concatenare mai direttamente l'input dell'utente nella stringa del comando. Usa `spawn`, che accetta gli argomenti in un array separato, o sanitizza rigorosamente l'input.
Hai bisogno di una soluzione su misura?
Dalla Web App al gestionale custom, trasformiamo le tue idee in software performante. Contattaci per una consulenza gratuita.
Richiedi una consulenza