[{"data":1,"prerenderedAt":506},["ShallowReactive",2],{"es-main-blog_es-\u002Fes\u002Fblog\u002Fcreate-your-eslint-config\u002F":3,"es-alternative-blog_en-\u002Fblog\u002Fcreate-your-eslint-config":253,"blog_es-related-\u002Fes\u002Fblog\u002Fcreate-your-eslint-config\u002F":453},{"id":4,"title":5,"body":6,"date":237,"description":238,"extension":239,"image":240,"meta":241,"navigation":242,"path":243,"readingTime":244,"schemaOrg":240,"seo":245,"stem":246,"tags":247,"toc":242,"updatedAt":240,"__hash__":252},"blog_es\u002Fes\u002Fblog\u002F0003.create-your-eslint-config.md","Crea tu propia configuración de ESLint y compártela entre proyectos",{"type":7,"value":8,"toc":228},"minimark",[9,26,31,46,65,74,77,81,96,110,131,135,144,149,153,156,210,218,222,225],[10,11,12,13,20,21,25],"p",{},"Si alguna vez has trabajado en varios proyectos, conoces el aburrimiento de copiar configuraciones de ",[14,15,19],"a",{"href":16,"rel":17},"https:\u002F\u002Feslint.org\u002F",[18],"nofollow","ESLint"," de un repositorio a otro. Cada vez que empiezas un proyecto nuevo, o partes de cero o copias el archivo ",[22,23,24],"code",{},"eslint.config.js"," del anterior. Hay una forma mejor: publicar tu propio paquete de configuración de ESLint.",[27,28,30],"h2",{"id":29},"por-qué-me-encanta-antfueslint-config","Por qué me encanta antfu\u002Feslint-config",[10,32,33,34,39,40,45],{},"Descubrir ",[14,35,38],{"href":36,"rel":37},"https:\u002F\u002Fgithub.com\u002Fantfu\u002Feslint-config",[18],"@antfu\u002Feslint-config"," cambió mi forma de configurar ESLint. El paso a \"Flat Config\" me parecía innecesario, hasta que ",[14,41,44],{"href":42,"rel":43},"https:\u002F\u002Fantfu.me\u002F",[18],"Anthony Fu"," creó una configuración que hace que ESLint sea sencillo de montar y de extender.",[10,47,48,49,52,53,58,59,64],{},"En lugar de hacer malabares con docenas de plugins, configuraciones y dependencias, instalas un paquete y listo. Por defecto no necesita configuración: lo importas, lo exportas y respeta tu ",[22,50,51],{},".gitignore",". Analiza tu proyecto y activa las reglas adecuadas para ",[14,54,57],{"href":55,"rel":56},"https:\u002F\u002Fvuejs.org\u002F",[18],"Vue",", ",[14,60,63],{"href":61,"rel":62},"https:\u002F\u002Fwww.typescriptlang.org\u002F",[18],"TypeScript"," o JavaScript, con unos valores por defecto con criterio que puedes sobrescribir.",[10,66,67,68,73],{},"Además formatea el código, así que en la mayoría de proyectos no necesitas ",[14,69,72],{"href":70,"rel":71},"https:\u002F\u002Fprettier.io\u002F",[18],"Prettier",". Aparte de JavaScript y TypeScript, se encarga de JSON, Markdown y YAML, de modo que ESLint lo gestiona todo.",[10,75,76],{},"Para mi stack habitual (Vue y TypeScript), es el mejor punto de partida para configurar ESLint.",[27,78,80],{"id":79},"por-qué-crear-tu-propio-paquete-de-configuración-de-eslint","¿Por qué crear tu propio paquete de configuración de ESLint?",[10,82,83,84,87,88,91,92,95],{},"Extender la configuración de ",[22,85,86],{},"antfu"," con mis preferencias y plugins es sencillo, porque está pensada para componer la tuya propia. Estoy acostumbrado a acabar las líneas con punto y coma, indentar con 2 espacios y tener el ",[22,89,90],{},"\u003Ctemplate>"," al principio de mis ficheros ",[22,93,94],{},".vue",".",[10,97,98,99,103,104,109],{},"Pero lo importante no son los gustos personales, sino la ",[100,101,102],"strong",{},"consistencia y la reutilización",". Cuando publicas tu configuración de ESLint como paquete de ",[14,105,108],{"href":106,"rel":107},"https:\u002F\u002Fwww.npmjs.com\u002F",[18],"npm",", puedes:",[111,112,113,119,122,125,128],"ul",{},[114,115,116,117,95],"li",{},"Añadir plugins de librerías concretas que no pueden entrar en el core de ",[22,118,86],{},[114,120,121],{},"Usarla en todos tus repositorios, con las mismas reglas en todos.",[114,123,124],{},"Versionar tus reglas de linting: actualizas el paquete, subes la versión en tus proyectos y todos tienen las reglas nuevas.",[114,126,127],{},"Compartirla con tu equipo o hacerla pública.",[114,129,130],{},"Mantenerla en un solo sitio en vez de actualizar las mismas reglas en 10 proyectos.",[27,132,134],{"id":133},"mi-configuración-angelblancoeslint-config","Mi configuración: @angelblanco\u002Feslint-config",[10,136,137,138,143],{},"Mi configuración, ",[14,139,142],{"href":140,"rel":141},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@angelblanco\u002Feslint-config",[18],"@angelblanco\u002Feslint-config",", está disponible en npm y el código fuente está en GitHub:",[145,146],"github-repo-preview",{"description":147,"repo":148},"Configuración de ESLint de Ángel Blanco, construida sobre @antfu\u002Feslint-config para proyectos Vue + TypeScript.","angelblanco\u002Feslint-config",[27,150,152],{"id":151},"cómo-crear-la-tuya","Cómo crear la tuya",[10,154,155],{},"Crear tu propia configuración de ESLint es sencillo. En lugar de empezar de cero, puedes hacer un fork de la mía:",[157,158,159,166,169,180,186,192,198,204],"ol",{},[114,160,161,162,95],{},"Haz fork de ",[14,163,142],{"href":164,"rel":165},"https:\u002F\u002Fgithub.com\u002Fangelblanco\u002Feslint-config",[18],[114,167,168],{},"Regístrate en npm con tu usuario de GitHub.",[114,170,171,172,175,176,179],{},"Actualiza ",[22,173,174],{},"package.json"," con el nombre de tu paquete, por ejemplo ",[22,177,178],{},"@tunombre\u002Feslint-config",", y el resto de datos.",[114,181,182,183,95],{},"Instala las dependencias con ",[22,184,185],{},"pnpm install",[114,187,188,189,95],{},"Personaliza las reglas en ",[22,190,191],{},"index.ts",[114,193,194,195,95],{},"Genera el JavaScript con tsup ejecutando ",[22,196,197],{},"pnpm build",[114,199,200,201,95],{},"Publícalo con ",[22,202,203],{},"npm publish --access public",[114,205,206,207,209],{},"Instala ",[22,208,178],{}," en el resto de tus repositorios e impórtalo en su configuración de ESLint.",[10,211,212,213,217],{},"El ",[14,214,216],{"href":164,"rel":215},[18],"README de mi repositorio"," tiene las instrucciones de instalación actualizadas, ejemplos de uso y todas las reglas que he cambiado. Abre un issue si quieres que te eche una mano.",[27,219,221],{"id":220},"hazla-tuya","Hazla tuya",[10,223,224],{},"No hace falta reinventar la rueda. Parte de algo sólido como @antfu\u002Feslint-config, ajústalo a tu gusto y publícalo. Todo el proceso lleva más o menos una hora, y acabas con una única configuración de linting versionada para todos tus proyectos.",[10,226,227],{},"Si trabajas con Vue y TypeScript, prueba la configuración de antfu o la mía. Si ninguna es exactamente lo que buscas, haz un fork y hazla tuya.",{"title":229,"searchDepth":230,"depth":230,"links":231},"",2,[232,233,234,235,236],{"id":29,"depth":230,"text":30},{"id":79,"depth":230,"text":80},{"id":133,"depth":230,"text":134},{"id":151,"depth":230,"text":152},{"id":220,"depth":230,"text":221},"2025-11-02","Si alguna vez has trabajado en varios proyectos, conoces el aburrimiento de copiar configuraciones de ESLint de un repositorio a otro. Cada vez que empiezas un proyecto nuevo, o partes de cero o copias el archivo eslint.config.js del anterior. Hay una forma mejor: publicar tu propio paquete de configuración de ESLint.","md",null,{},true,"\u002Fes\u002Fblog\u002Fcreate-your-eslint-config","3",{"title":5,"description":238},"es\u002Fblog\u002F0003.create-your-eslint-config",[248,249,250,251,108],"eslint","typescript","vue","tooling","cHaiTvOL6Kof37Eyv9HVTQ1DAz7TMPqeuziUg_AE0xI",{"id":254,"title":255,"body":256,"date":237,"description":446,"extension":239,"image":240,"meta":447,"navigation":242,"path":448,"readingTime":244,"schemaOrg":240,"seo":449,"stem":450,"tags":451,"toc":242,"updatedAt":240,"__hash__":452},"blog_en\u002Fblog\u002F0003.create-your-eslint-config.md","Create your own ESLint config and share it across projects",{"type":7,"value":257,"toc":439},[258,268,272,283,296,303,306,310,322,333,353,357,364,367,371,374,421,429,433,436],[10,259,260,261,264,265,267],{},"If you've ever worked on multiple projects, you know the pain of copying ",[14,262,19],{"href":16,"rel":263},[18]," configurations between repositories. Every time you set up a new project, you either start from scratch or copy the ",[22,266,24],{}," file from your last one. There's a better way: publish your own shareable ESLint config package.",[27,269,271],{"id":270},"why-i-love-antfueslint-config","Why I love antfu\u002Feslint-config",[10,273,274,275,278,279,282],{},"Discovering ",[14,276,38],{"href":36,"rel":277},[18]," changed how I configure ESLint. The move to \"Flat Config\" seemed unnecessary to me, until ",[14,280,44],{"href":42,"rel":281},[18]," built a config that makes ESLint simple to set up and extend.",[10,284,285,286,288,289,58,292,295],{},"Instead of juggling dozens of plugins, configurations and dependencies, you install one package and you're done. It's zero config by default: you import it, export it, and it respects your ",[22,287,51],{},". It looks at your project and enables the right rules for ",[14,290,57],{"href":55,"rel":291},[18],[14,293,63],{"href":61,"rel":294},[18]," or plain JavaScript, with opinionated defaults you can override.",[10,297,298,299,302],{},"It also formats your code, so for most projects you don't need ",[14,300,72],{"href":70,"rel":301},[18],". Besides JavaScript and TypeScript, it handles JSON, Markdown and YAML, so ESLint manages everything.",[10,304,305],{},"For my usual stack (Vue and TypeScript), it's the best starting point for configuring ESLint.",[27,307,309],{"id":308},"why-create-your-own-eslint-config-package","Why create your own ESLint config package?",[10,311,312,313,315,316,318,319,321],{},"Extending ",[22,314,86],{},"'s config with my own preferences and plugins is simple, since it's designed for composing your own configuration. I'm used to ending lines with semicolons, indenting with 2 spaces and putting the ",[22,317,90],{}," at the top of my ",[22,320,94],{}," files.",[10,323,324,325,328,329,332],{},"But the real value isn't personal taste. It's ",[100,326,327],{},"consistency and reuse",". Once you publish your ESLint config as an ",[14,330,108],{"href":106,"rel":331},[18]," package, you can:",[111,334,335,341,344,347,350],{},[114,336,337,338,340],{},"Add plugins for specific libraries that can't be part of ",[22,339,86],{},"'s core.",[114,342,343],{},"Use it in all your repositories, with the same rules everywhere.",[114,345,346],{},"Version your linting rules: update the package, bump it in your projects, and they all get the new rules.",[114,348,349],{},"Share it with your team or make it public.",[114,351,352],{},"Maintain it in one place instead of updating the same rules in 10 projects.",[27,354,356],{"id":355},"my-config-angelblancoeslint-config","My config: @angelblanco\u002Feslint-config",[10,358,359,360,363],{},"My configuration, ",[14,361,142],{"href":140,"rel":362},[18],", is available on npm, and the source code is on GitHub:",[145,365],{"description":366,"repo":148},"Ángel Blanco's ESLint configuration, built on @antfu\u002Feslint-config for Vue + TypeScript projects.",[27,368,370],{"id":369},"how-to-create-your-own","How to create your own",[10,372,373],{},"Creating your own ESLint config is straightforward. Instead of starting from scratch, you can fork mine:",[157,375,376,382,385,395,400,405,410,415],{},[114,377,378,379,95],{},"Fork ",[14,380,142],{"href":164,"rel":381},[18],[114,383,384],{},"Register on npm with your GitHub username.",[114,386,387,388,390,391,394],{},"Update ",[22,389,174],{}," with your own package name, for example ",[22,392,393],{},"@yourname\u002Feslint-config",", and the rest of the details.",[114,396,397,398,95],{},"Install the dependencies with ",[22,399,185],{},[114,401,402,403,95],{},"Customize the rules in ",[22,404,191],{},[114,406,407,408,95],{},"Build the JavaScript output with tsup by running ",[22,409,197],{},[114,411,412,413,95],{},"Publish it with ",[22,414,203],{},[114,416,417,418,420],{},"Install ",[22,419,393],{}," in your other repositories and import it in their ESLint config.",[10,422,423,424,428],{},"The ",[14,425,427],{"href":164,"rel":426},[18],"README in my repository"," has up-to-date installation instructions, usage examples and every rule I changed. Open an issue if you want a hand.",[27,430,432],{"id":431},"make-it-yours","Make it yours",[10,434,435],{},"You don't need to reinvent the wheel. Start from something solid like @antfu\u002Feslint-config, adjust it to your taste and publish it. The whole process takes about an hour, and you end up with one versioned linting configuration for all your projects.",[10,437,438],{},"If you work with Vue and TypeScript, try antfu's config or mine. If neither is exactly what you want, fork it and make it yours.",{"title":229,"searchDepth":230,"depth":230,"links":440},[441,442,443,444,445],{"id":270,"depth":230,"text":271},{"id":308,"depth":230,"text":309},{"id":355,"depth":230,"text":356},{"id":369,"depth":230,"text":370},{"id":431,"depth":230,"text":432},"If you've ever worked on multiple projects, you know the pain of copying ESLint configurations between repositories. Every time you set up a new project, you either start from scratch or copy the eslint.config.js file from your last one. There's a better way: publish your own shareable ESLint config package.",{},"\u002Fblog\u002Fcreate-your-eslint-config",{"title":255,"description":446},"blog\u002F0003.create-your-eslint-config",[248,249,250,251,108],"nprwRcjtIDQhOpoIxi-CVGmLP7lyyRQF8ylxPWnkRrU",[454,463,475,485,487,495],{"id":455,"path":456,"title":457,"description":458,"date":459,"readingTime":460,"tags":461},"blog_es\u002Fes\u002Fblog\u002F0006.lint-tailwind-css-v4-with-eslint.md","\u002Fes\u002Fblog\u002Flint-tailwind-css-v4-with-eslint","@angelblanco\u002Feslint-config 3.0 ya disponible, ahora con Tailwind CSS","@angelblanco\u002Feslint-config 3.0 ya está en npm: lint opcional de Tailwind CSS v4, @antfu\u002Feslint-config v10 y ESLint 10.","2026-11-07","2",[248,462,251,108],"tailwindcss",{"id":464,"path":465,"title":466,"description":467,"date":468,"readingTime":469,"tags":470},"blog_es\u002Fes\u002Fblog\u002F0005.apt-install-php-85-on-ubuntu-26.md","\u002Fes\u002Fblog\u002Fapt-install-php-85-on-ubuntu-26","Instalar PHP 8.5 con apt en Ubuntu 26.04","Instala PHP 8.5 y Composer en Ubuntu 26.04 LTS con apt desde el repositorio packages.sury.org de Ondřej Surý y mantenlos al día con apt upgrade.","2026-11-06","12",[471,472,473,474],"php","ubuntu","composer","bash",{"id":476,"path":477,"title":478,"description":479,"date":480,"readingTime":481,"tags":482},"blog_es\u002Fes\u002Fblog\u002F0004.apt-install-node-26-on-ubuntu-26.md","\u002Fes\u002Fblog\u002Fapt-install-node-26-on-ubuntu-26","Instalar Node.js 26 con apt en Ubuntu 26.04","El 21 de octubre de 2026, Node.js publicó parches de seguridad para diez vulnerabilidades que afectan a sus versiones con soporte, cuatro de ellas graves, incluida una ejecución remota de código. Las versiones sin soporte, como Node.js 20 y 25, no recibirán actualizaciones.","2026-11-05","8",[483,472,484,474],"nodejs","javascript",{"id":4,"path":243,"title":5,"description":238,"date":237,"readingTime":244,"tags":486},[248,249,250,251,108],{"id":488,"path":489,"title":490,"description":491,"date":492,"readingTime":493,"tags":494},"blog_es\u002Fes\u002Fblog\u002F0002.install-node-24-on-ubuntu-24.md","\u002Fes\u002Fblog\u002Finstall-node-24-on-ubuntu-24","Instalar Node.js 24 en Ubuntu 24.04","Instalar Node.js 24 en Ubuntu 24 debería ser un proceso sencillo. Aunque Ubuntu incluye una versión de Node.js en sus repositorios por defecto, es posible que quieras utilizar una versión más reciente, como Node.js 24, que es LTS desde el 28 de octubre de 2025 y tiene soporte hasta abril de 2028. Si vas a instalarlo desde cero, mejor instala Node.js 26 en Ubuntu 26.04. En esta guía te enseño dos métodos para que lo tengas listo rápidamente.","2025-10-12","6",[483,472,484,474],{"id":496,"path":497,"title":498,"description":499,"date":500,"readingTime":501,"tags":502},"blog_es\u002Fes\u002Fblog\u002F0001.hello.md","\u002Fes\u002Fblog\u002Fhello","De Svelte a Nuxt: Reconstruyendo mi portfolio en 2025","Estamos en 2025 y acabo de publicar una versión completamente nueva de mi web personal. He migrado de un stack basado en Svelte y Sapper a Nuxt, Tailwind CSS y un monorepo con Turborepo. No ha sido un cambio estético, sino una reescritura completa, fruto de cinco años de evolución en el frontend y de las ganas de usar en casa las mismas herramientas que en el trabajo.","2025-09-27","4",[503,250,504,505,462],"nuxt","svelte","turborepo",1794096651655]