Skip to content

Limpieza de dependencias: de 27 vulnerabilidades a 8 - #11

Open
davidpp09 wants to merge 2 commits into
mainfrom
fix/dependencias-basura
Open

davidpp09 wants to merge 2 commits into
mainfrom
fix/dependencias-basura

Conversation

@davidpp09

Copy link
Copy Markdown
Owner

Limpieza de dependencias: de 27 vulnerabilidades a 8

google y cli estaban declaradas como dependencias de producción y no se usan en ninguna parte del proyecto.

google es un scraper de resultados de búsqueda cuya última versión es de hace una década. Arrastraba:

  • request@2.88.2 — abandonado oficialmente desde 2020
  • cheerio@0.19.0 — de 2015, con css-select y css-what vulnerables

De ahí salían las 3 críticas que se han ido.

shadcn sí se usaba — casi rompo el build

El escaneo original decía que tampoco se usaba, y es falso: src/index.css:3 tiene

@import "shadcn/tailwind.css";

Al quitarla, el build murió con Can't resolve 'shadcn/tailwind.css'. El escaneo había buscado from '...' en JavaScript y no miró los @import de CSS.

Así que no se quita: se mueve a devDependencies, que es donde le toca — el @import se resuelve al compilar, y tanto el CI como deploy-frontend.sh corren npm ci completo (sin --omit=dev), así que sigue disponible al construir.

Resultado

Antes Después
Vulnerabilidades en producción 27 (2 low, 8 moderate, 13 high, 4 críticas) 8 (1 moderate, 6 high, 1 crítica)
Paquetes en el árbol — 331 menos
CSS del build 79.15 kB 78.47 kB
JS del build 1110.48 kB 1089.32 kB

Que el CSS pese prácticamente lo mismo es la comprobación de que los estilos de shadcn siguen entrando; si el @import se hubiera perdido en silencio, ese número se habría desplomado.

Verificado

  • npm run lint y npm run build en verde
  • La app levanta y responde
  • El bundle no perdió estilos (ver tamaños arriba)

Pendiente aparte

Lo que queda viene sobre todo de axios 1.14.0 (la crítica y varias altas), más react-router y websocket-driver. Actualizar axios toca la librería con la que la app entera habla con el backend, así que va en su propio PR para poder probarlo con calma.

`google` y `cli` estaban declaradas como dependencias de produccion y no se
usan en ninguna parte. `google` es un scraper de resultados de busqueda cuya
ultima version es de hace una decada, y arrastraba request@2.88.2 (abandonado
desde 2020) y cheerio@0.19.0 (de 2015): de ahi salian las vulnerabilidades
criticas.

`shadcn` SI se usa, aunque no desde JavaScript: src/index.css importa
"shadcn/tailwind.css". Quitarla dejaba el build en "Can't resolve". Se movio a
devDependencies, que es su sitio: el @import se resuelve al compilar, y tanto
el CI como deploy-frontend.sh corren `npm ci` completo.

Resultado:
- 331 paquetes menos en el arbol de dependencias
- Vulnerabilidades de produccion: 27 (4 criticas, 13 altas) -> 8 (1 critica)
- Las 3 criticas que desaparecieron venian todas de `google`

Verificado: lint y build en verde, el CSS del build pesa 78.47 kB contra los
79.15 kB de antes (o sea que los estilos de shadcn siguen ahi), el JS bajo 21
kB, y la app carga y responde.

Lo que queda pendiente es axios: sigue en 1.14.0 y aporta la critica y varias
altas que restan. Se trata aparte porque actualizarlo toca la libreria con la
que la app entera habla con el backend.
El CI fallaba en `npm ci` con "Missing: @emnapi/core from lock file".

Causa: el lockfile se regenero en Windows y npm poda las dependencias
OPCIONALES que no aplican a la plataforma actual. @emnapi/core y
@emnapi/runtime solo se instalan en Linux, que es justo donde corre el CI, asi
que el lockfile quedaba incompleto para Ubuntu aunque en Windows funcionara.

Arreglo: se rehizo el lockfile con `npm install --package-lock-only` sobre el
de main y se le devolvieron las dos entradas opcionales que se habian podado.
El filtro por "optional": true es lo que hace esto seguro: los 59 paquetes que
SI queremos fuera (google, cli, request, cheerio y su arbol) no son
opcionales, asi que no se restauran.

Tambien se descarto regenerar el lockfile desde cero: eso subia todas las
dependencias a la ultima version compatible con su rango, y con
eslint-plugin-react-hooks nuevo aparecian 18 errores de lint en pantallas que
este cambio no toca. Actualizar dependencias es otro trabajo y merece su
propio PR.

Verificado con `npm ci` local (lo mismo que corre el CI): instala, lint y
build en verde.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant