Integración de Prettier
Prettier impone un formato consistente para que la revisión de código se centre en el comportamiento, no en los puntos y comas o los saltos de línea.
Receta
Tarjeta de receta de referencia rápida: lista para copiar y pegar.
npm install -D prettier eslint-config-prettier// .prettierrc
{
"semi": true,
"singleQuote": false,
"trailingComma": "all",
"printWidth": 100
}{
"scripts": {
"format": "prettier --write .",
"format:check": "prettier --check ."
}
}Cuándo usarlo:
- Los debates sobre el formato ralentizan las PR.
- Quieres que ESLint maneje la lógica y Prettier el estilo.
- Los colaboradores usan diferentes editores pero un solo estilo de salida.
Ejemplo de trabajo
// eslint.config.js
import eslint from "@eslint/js";
import tseslint from "typescript-eslint";
import eslintConfigPrettier from "eslint-config-prettier";
export default tseslint.config(
eslint.configs.recommended,
...tseslint.configs.recommended,
eslintConfigPrettier,
{ ignores: ["dist/**"] }
);// package.json
{
"scripts": {
"lint": "eslint .",
"format": "prettier --write .",
"format:check": "prettier --check ."
},
"devDependencies": {
"prettier": "^3.4.0",
"eslint-config-prettier": "^9.1.0",
"husky": "^9.1.0",
"lint-staged": "^15.2.0"
}
}// lint-staged.config.js
export default {
"*.{ts,json,md}": ["prettier --write"],
"*.ts": ["eslint --fix"],
};npx husky init
echo "npx lint-staged" > .husky/pre-commitLo que esto demuestra:
eslint-config-prettierdeshabilita las reglas estilísticas de ESLint que entran en conflicto con Prettier.lint-stagedformatea solo los archivos staged al hacer commit.format:checkse ejecuta en CI sin modificar archivos.
Inmersión profunda
Cómo funciona
- Prettier analiza y reimprime el código con reglas deterministas.
- ESLint se ejecuta después de Prettier en pre-commit para detectar problemas de lógica en el código formateado.
- La función "formato al guardar" del editor llama a Prettier a través de la extensión de VS Code/Cursor.
- CI usa
--checkpara fallar las PR con diferencias sin formato.
Configuración de VS Code (commitida o documentada)
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true
}Notas de TypeScript
- Prettier no realiza comprobación de tipos; combínalo con
tsc --noEmiten CI. - JSON y Markdown en los repositorios también se benefician de Prettier; inclúyelos en el script
format.
Errores comunes
- Plugins estilísticos de ESLint con Prettier - Conflictos de formato duplicados. Solución: usa
eslint-config-prettier, elimina los plugins estilísticos de ESLint. - Formatear todo el repositorio en una sola PR -
git blameruidoso. Solución: adopta Prettier temprano; usa un commit de formato único con.git-blame-ignore-revs. - Husky omitido con
--no-verify- El código incorrecto aún puede ser commitido. Solución: aplicaformat:checkylinten CI independientemente de los hooks. - Diferentes versiones de Prettier localmente vs. CI - Bloquea Prettier en
devDependencies; usanpm ci. - Archivos generados formateados - La salida de Swagger cambia en cada build. Solución: agrega
dist/,openapi.jsona.prettierignore.
Alternativas
| Alternativa | Usar cuándo | No usar cuándo |
|---|---|---|
| Solo estilístico de ESLint | No hay política de Prettier en la organización | El equipo ya está estandarizado en Prettier |
| Biome | Quieres lint+format en una sola herramienta | Los plugins del ecosistema esperan ESLint |
| Solo EditorConfig | Solo indentación básica | TypeScript necesita un formateador completo |
Preguntas frecuentes
¿Prettier reemplaza a ESLint?
No. Prettier formatea; ESLint detecta variables no utilizadas, mal uso de promesas y límites de importación.
¿Debería CI ejecutar format:check o format?
format:check en CI (solo lectura). Los desarrolladores ejecutan format o confían en los hooks de pre-commit localmente.
¿Cómo ignoro un archivo?
Agrega rutas a .prettierignore (misma sintaxis que .gitignore).
¿Pueden los proyectos NestJS y Express compartir la configuración de Prettier?
Sí. El .prettierrc raíz se aplica a través de los workspaces del monorepo a menos que se sobrescriba.
¿Qué pasa con YAML y Dockerfile?
Prettier soporta YAML; los Dockerfiles necesitan un plugin o un linter separado. Prioriza TS/JSON/MD primero.
¿Es necesario lint-staged?
No, pero mantiene los commits rápidos. format:check en CI es la verdadera puerta de entrada.
¿Cómo arreglo una base de código grande sin formato?
Una PR: npm run format, agrega la comprobación de CI, opcionalmente .git-blame-ignore-revs para el SHA del formato.
¿Tiene sentido prettier-eslint?
Raramente con la configuración plana. Prefiere la lista de deshabilitación de eslint-config-prettier en lugar de ejecutar Prettier dentro de ESLint.
¿Deberían formatearse los documentos de markdown?
Sí, si los documentos residen en el repositorio; el ajuste consistente ayuda a las diferencias en site/ y los archivos README.
¿Cómo ejecutan el formato los monorepos?
Script raíz: "format:check": "prettier --check ." con ignorados para dist/ en cada paquete.
Relacionado
- Conceptos básicos de Linting - Fundamentos de la configuración plana de ESLint
- Mejores prácticas de Linting - Política de cero advertencias y CI
- Comprobación de tipos en CI - Puerta separada del formato
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.