Mejores Prácticas de Linting
Puertas de calidad que mantienen las bases de código TypeScript Node consistentes, estrictas y aplicadas por CI.
Cómo Usar Esta Lista
- Adóptala al iniciar la configuración plana de ESLint en un nuevo servicio.
- Convierte las advertencias en errores una vez que la base de código esté limpia.
- Ejecuta los mismos comandos localmente que en CI; no hay reglas especiales solo para IDE.
A - Configuración de ESLint
- Usa la configuración plana de ESLint 9 (
eslint.config.js). El.eslintrcheredado es una ruta obsoleta para nuevos repositorios. - Habilita
typescript-eslintrecomendado orecommendedTypeChecked. Las reglas conscientes del tipo detectan errores asíncronos. - Confirma
ignoresparadist/,node_modules/, coverage. La salida generada nunca debe ser linted. - Separa las anulaciones para pruebas y scripts. Relaja
no-explicit-anysolo en las pruebas. - Deshabilita las reglas estilísticas de ESLint cuando uses Prettier.
eslint-config-prettierpreviene conflictos.
B - Formato y UX del Desarrollador
- Prettier para formato; ESLint para corrección. No debatas sobre tabulaciones en la revisión de código.
- Formato al guardar documentado para VS Code/Cursor. Misma extensión y configuración en todo el equipo.
-
format:checken CI. Verificación de solo lectura en cada PR. -
lint-stageden pre-commit opcional; CI es obligatorio.--no-verifyno debe eludir la calidad. -
.prettierignoreexcluye OpenAPI generado y dist. Evita cambios de formato sin sentido.
C - Puertas de Fusión de CI
-
npm run typecheck(tsc --noEmit) en cada PR. Los tipos no son opcionales para los backends de TS. -
npm run lint -- --max-warnings 0para una política de cero advertencias. Las advertencias se convierten rápidamente en deuda. - Orden: install → typecheck → lint → test → build. Falla rápido en las comprobaciones más baratas.
- Fija Node 24.18.0 en CI para que coincida con los motores locales. ESLint consciente del tipo usa la misma versión de TS.
- Monorepos:
turbo run lint typecheckcon caché. Las tareas por paquete se mantienen en orden de gráfico.
D - Arquitectura e Higiene
- Prohíbe
console.logensrc/medianteno-console. Usa un logger estructurado (Pino) en el código de la aplicación. - Aplica límites de importación con
eslint-plugin-import-xo Nx. Las aplicaciones no importan aplicaciones hermanas. -
no-extraneous-dependenciesen código de producción. Las dependencias fantasma elevadas ocultan declaraciones faltantes. - Ejecuta knip periódicamente para exportaciones y dependencias no utilizadas. Reduce la superficie de auditoría en monorepos.
- No uses
@ts-ignoresin comentario y ticket. Prefiere@ts-expect-errorcon explicación.
E - Política y Propiedad
- Documenta cómo agregar una nueva regla de ESLint (RFC o chat de equipo). Evita guerras de reglas impulsivas en los PR.
-
packages/eslint-configcompartido en monorepos. Una única fuente de verdad para todos los servicios. - Versión de ESLint bloqueada en el archivo de bloqueo raíz.
npm ciasegura la paridad entre CI y local. - Corrige el lint en el PR que introduce violaciones. No acumules deuda de lint de "corregir más tarde".
- Combina las puertas de lint con una lista de verificación de revisión de código. La automatización detecta la estructura; los humanos detectan el diseño.
Preguntas Frecuentes
¿Por qué cero advertencias?
Las advertencias se ignoran en semanas ajetreadas y se acumulan por miles. --max-warnings 0 mantiene el listón claro.
¿Es obligatorio ESLint consciente del tipo?
Muy recomendado para código Node asíncrono. Si es demasiado lento, limita la configuración consciente del tipo solo a src/.
¿Debe ejecutarse el formato antes o después del lint en los hooks?
Prettier primero, luego ESLint --fix: coincide con pre-commit y evita conflictos de correcciones.
¿Cómo adoptamos lint en un repositorio existente?
Un PR que habilita reglas en advertencia, corrige o suprime con tickets, luego cambia a error por directorio.
¿NestJS necesita diferentes reglas de ESLint?
Agrega @nestjs/eslint-plugin o patrones recomendados para clases inyectables y límites de módulos.
¿Podemos omitir el lint para PRs solo de documentación?
Los filtros de ruta pueden omitir el lint cuando solo cambian *.md; el valor predeterminado debe lintar cualquier cambio de TS.
¿Qué pasa con los linters de SQL o YAML?
Fuera del alcance de ESLint; agrega herramientas dedicadas pero mantén las puertas de TS sin cambios.
¿Qué tan estrictas deben ser las anulaciones de prueba?
Relaja any y console; mantén no-unused-vars y la higiene de importación.
¿Quién es el propietario del paquete `eslint-config` compartido?
El equipo de plataforma o arquitectura revisa los cambios; los servicios consumen versiones lanzadas.
¿Cómo interactúa el lint con el código generado por IA?
Se aplican las mismas puertas. El código generado debe pasar lint, typecheck y test antes de la fusión.
Relacionado
- Conceptos Básicos de Linting - recorrido por la configuración plana
- Integración de Prettier - configuración de formato al guardar
- Typecheck en CI - puerta
tsc --noEmit
Versiones de la pila: Esta página fue escrita para Node.js 24.18.0 (LTS activa), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 y NestJS 11.