0 votos

¿Cómo puedo eliminar las carpetas node_modules de los proyectos que no he tocado recientemente?

Quiero buscar carpetas (llamemos a cada una de ellas $folder ) que contiene la carpeta node_modules/.

node_modules son lugares donde se instalan librerías de javascript, y estas librerías a su vez suelen tener carpetas con node_modules, por lo que nos conviene excluir siempre node_modules y sus hijos de la búsqueda anterior. También se pueden excluir con seguridad de la siguiente:

Para cada $folder , encontrar su archivo más recientemente modificado. Si esa fecha tiene más de, digamos, 4 semanas de antigüedad, me gustaría borrar $folder/node_modules .

Me imagino que puedo añadir esto a cron... pero no estoy seguro de si apple proporciona una forma más agradable de hacer esto que a través de bash o node o lo que sea

0voto

roberto tomás Puntos 101

Debería haber tenido un poco de paciencia .. en lugar de publicar la pregunta aquí primero. Creo que tengo una solución.

~/bin/clean_old_projects.js

const { readdirSync, statSync, rmSync } = require('node:fs')
const {execSync} = require('node:child_process')

const getDirectories = source => {  
  try {
    return readdirSync(source, { withFileTypes: true })
      .filter(dirent => dirent.isDirectory())
      .map(dirent => `${source}/${dirent.name}`)
  }
  catch (e) { return [] }
}

targets = [process.env.HOME]
nodeProjects = []
for (let target of targets) {
  if (/node_modules$/.test(target)) {
    nodeProjects.push(target.replace('/node_modules', ''))
  } else {
    targets.push(...getDirectories(target))
  }
}

const sh = fh => `find "${fh}" -name node_modules -prune -o -type f -print0 | xargs -0 stat -f "%m %N" | sort -rn | head -1 | cut -f2- -d" "`

const fourWeeks = 2419200
const now = new Date()
for (let target of nodeProjects) {
  const fh = execSync(sh(target)).toString().trim()
  if(now - statSync(fh.length? fh: target).mtime > fourWeeks)
    rmSync(target + '/node_modules',  { recursive: true, force: true })
}

entonces crontab -e y ahorrar:

0 3 14,28 * * /usr/local/bin/node /Users/MY_HOME_DIRECTORY/bin/clean_old_projects.js

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X