24 de fevereiro de 2024

Excluindo todas as node_modules em uma só lapada

Fui excluir coisas desnecessárias do meu computador e me deparei com vários GB só em node_modules. Logo pensei: "nem a pau vou excluir uma por uma". São vários projetos pessoais e de estudos, então fui ao nosso amigo Geppetto e pedi um código para varrer a minha pasta de projetos e excluir qualquer node_modules que encontrar. Deixo abaixo o código para Linux que ele gerou e também a versão em Node.js para executar em qualquer sistema, desde que esteja com o node instalado.

Terminal
#!/bin/bash

path="/home/fulano/Projects"

if [ -d "$path" ]; then
    cd "$path"

    for subfolder in */; do
        if [ -d "$subfolder" ]; then
            echo "Searching for node_modules in $subfolder..."
            find "$subfolder" -name "node_modules" -type d -prune -exec rm -rf '{}' +
            echo "node_modules folders deleted in $subfolder."
        fi
    done

    echo "Operation completed."
else
    echo "The 'Projects' folder was not found."
fi

Versão em Node.Js

delete-node-modules.js
const fs = require('node:fs');
const path = require('node:path');

const targetFolder = process.argv[2];

if (!targetFolder) {
  console.error(
    '\x1b[31m',
    'Please provide the folder path as an argument.',
    '\x1b[0m'
  );
  process.exit(1);
}

console.log(
  '\n\x1b[36m',
  `❯ Searching for node_modules folders in ${targetFolder}...`,
  '\x1b[0m\n'
);

function recursivelyDeleteNodeModules(folder) {
  try {
    const files = fs.readdirSync(folder);

    for (const file of files) {
      const filePath = path.join(folder, file);
      const stat = fs.statSync(filePath);

      if (stat.isDirectory()) {
        if (file === 'node_modules') {
          fs.rmSync(filePath, { recursive: true });
        } else {
          recursivelyDeleteNodeModules(filePath);
        }
      }
    }
  } catch (err) {
    console.error(
      '\x1b[31m',
      `Error processing folder ${folder}: ${err}`,
      '\x1b[0m'
    );
  }
}

recursivelyDeleteNodeModules(targetFolder);

console.log(
  '\n\x1b[32m',
  'Deleted all node_modules folders successfully.',
  '\x1b[0m\n'
);

Lembre-se de passar o caminho da sua pasta de projetos ou estudos como argumento.

delete-node-modules.js
node delete-node-modules.js /home/fulano/Projects/