Mejores prácticas de Linting
Un resumen condensado de las 25 mejores prácticas más importantes extraídas de todas las páginas en esta sección.
Busca en todas las páginas de la documentación
Un resumen condensado de las 25 mejores prácticas más importantes extraídas de todas las páginas en esta sección.
Comienza con eslint-config-expo: npx expo lint genera la flat config - no copies cargo-cultizadamente un .eslintrc de 2019 de un repo web.
Usa la flat config de ESLint en nuevos proyectos: eslint.config.js con eslint-config-expo/flat - el eslintrc heredado es un impuesto de migración, no una característica.
Script lint en package.json: expo lint o eslint . - cada PR ejecuta el mismo comando localmente y en CI.
Separa Prettier de ESLint: Formatea con Prettier; lint con ESLint - eslint-config-prettier previene peleas de reglas.
Ordena imports con un plugin Prettier: @ianvs/prettier-plugin-sort-imports - el orden consistente de imports vence al bike-shedding en review.
Extiende expo/tsconfig.base antes de strict: La base oficial incluye paths y configuraciones JSX - los flags strict se superponen en una base funcional.
Habilita strict incrementalmente: noImplicitAny por carpeta vence a un muro de mil errores - sigue el progreso en un ADR viviente.
Agrega noUncheckedIndexedAccess deliberadamente: Atrapa bugs params[0] en código de router - habilita después de la limpieza de nullabilidad en utilidades compartidas.
Ejecuta tsc --noEmit en CI: Los tipos no son opcionales en móvil - ESLint no reemplaza al compilador.
Instala eslint-plugin-react-hooks: rules-of-hooks y exhaustive-deps son innegociables - el código móvil usa effects para AppState, focus y NetInfo.
Audita exhaustive-deps para focus effects: los callbacks de useFocusEffect necesitan deps estables - los cierres obsoletos causan fetches duplicados en cambio de tab.
Evita eslint-disable en reglas de hooks: Si los deps son "demasiado ruidosos", arregla el diseño del effect - la supresión oculta bugs reales de datos obsoletos.
Prohíbe console.log en rutas de producción: no-console con allow: ["warn", "error"] - usa un wrapper de logger para niveles de debug.
Impón props a11y con eslint-plugin-react-native-a11y: accessibilityLabel en Pressables solo de icono - atrapa en CI, no en revisión de App Store.
Restringe imports entre características: no-restricted-paths o límites de Nx - features/billing no debe importar features/orders/internals.
Reglas locales personalizadas para invariantes de org: Pequeños plugins createRule para APIs prohibidas (AsyncStorage en capa equivocada) - documenta en CONTRIBUTING.
CI ejecuta lint, typecheck, format:check, test: Cuatro scripts, un meta-script validate - los PRs no se fusionan en verde parcial.
Cache ESLint en GitHub Actions: actions/cache en .eslintcache - los monorepos necesitan claves de cache por paquete.
Espeja gates en EAS Workflows: El mismo validate antes de eas build - los binarios nativos no deben enviarse desde ramas sin lint.
Ejecuta Knip en un cronograma: Las exportaciones no usadas y archivos muertos se acumulan en apps RN con Expo Router entrypoints - los Knip PRs trimestrales se mantienen pequeños.
Empareja Knip con depcheck: Knip encuentra código no utilizado; depcheck encuentra deps de package.json no utilizadas - los módulos nativos dejados instalados inflan el tiempo de prebuild.
Añade a la lista blanca las entradas de Expo Router en Knip: las rutas app/** son dinámicas - configura patrones de entry o los falsos positivos bloquean la adopción.
Política de cero advertencias con una lista de puesta al sol: Las nuevas advertencias fallan en CI; las advertencias heredadas tienen IDs de ticket - velocidad sin deuda infinita.
Auto-fix al guardar en editor, verificación completa en CI: Los desarrolladores obtienen retroalimentación rápida; CI sigue siendo autoridad - no omitas CI porque "se veía bien localmente".
Documenta supresiones con comentarios why: eslint-disable-next-line requiere una justificación de una línea - @ts-expect-error preferido sobre @ts-ignore por la misma razón.
format:check es la capa de cumplimiento.src/ y features/.Versiones de Stack: Esta página fue escrita para React 19.2.3, React Native 0.86.0, y Expo SDK 57 (
expo~57.0.4).
Revisado por Chris St. John·Última actualización: 16 jul 2026