Como rodar comandos shell usando Node.js

Dicas - 02/Ago/2020 - por André Kanamura

Em nossos desafios de código Ruby do Code Saga, costumamos incluir um arquivo de configuração que pode ser rodado para instalar as dependências do desafio com mais facilidade. Como experimento, fizemos um estudo de como isso poderia ser feito com Node.js. O arquivo setup.js com um código bem simplificado ficou assim:

#! /usr/bin/env node

const { exec } = require('child_process');
const path = require("path");

console.log("===Instalando dependências===");

exec(`npm init -y && npm install --save-dev mocha --prefix ${path.resolve(process.cwd())}`, (error, stdout, stderr) => {
    if (error) {
        console.log(`error: ${error.message}`);
        return
    }
    if (stderr) {
        console.log(`stderr: ${stderr}`);
    }
    console.log("==Tudo pronto para começar==")
});

Para executar comandos shell, podemos usar o módulo child_process, que roda o comando e armazena o output em buffer para que você possa acessá-lo ao final. Neste exemplo, como estamos instalando as dependências de um desafio, primeiro mostramos uma mensagem no terminal antes de começar o processo. Em seguida, é executado o comando shell de instalação do framework de testes Mocha com o npm (que é instalado junto com Node.js). Podemos abortar a execução caso algum erro ocorra ou apresentamos uma mensagem de sucesso na tela ao final. Neste caso também incluímos o path exato do processo para a instalação no --prefix e o npm init -y para criar o package.json no diretório antes de rodar o comando de instalação npm --save-dev mocha.

Se você quiser aprender mais sobre as possibilidades de uso do child_process, recomendamos a documentação oficial de Node.js abaixo.

Referências

Foto de perfil do autor
André Kanamura

Dev na Campus Code