Error 'encoding' en Next.js con Supabase: ¿Ignorar o instalar?

Estás montando tu app Next.js con Supabase y de repente, el error del módulo 'encoding' te frena. ¿Es un aviso inofensivo o algo que necesitas solucionar ya?

El dilema del 'encoding' en Next.js y Supabase

Estás en tu salsa, armando un proyecto nuevo con Next.js 13+ y decides usar Supabase para la base de datos. Todo va viento en popa hasta que intentas compilar o levantar la aplicación. De repente, la consola te escupe un error: Module not found: Can't resolve 'encoding'.

Esto me pasó hace poco, y te juro que me sacó un poco de quicio. Uno espera que las librerías se lleven bien de fábrica, pero no siempre es así. Había intentado lo de siempre: limpiar caché de npm, reinstalar los módulos. Nada.

¿Es solo una advertencia? La versión oficial

Cuando uno busca este error, una de las primeras cosas que aparece es que "es solo un warning que se puede ignorar con seguridad". De hecho, el equipo de Supabase-JS lo menciona en su GitHub.

Hay un issue abierto donde explican que están trabajando para removerlo. Dicen que es un remanente de alguna dependencia interna y que no afecta la funcionalidad.

Ahora, mi opinión es que un warning que te detiene la compilación o que te sale en cada recarga no es tan ignorado. Entiendo la explicación técnica, pero en la práctica, tener la consola llena de ruido te distrae y te hace pensar que algo está mal. Prefiero una consola limpia.

La solución rápida y práctica

La otra respuesta que encontré, y que para mí es la más directa, es simplemente instalar el módulo encoding. Sí, así de simple, aunque suene un poco a parche.

El comando es:

npm install encoding

Después de ejecutar eso y reiniciar el servidor de desarrollo, el error desapareció. Magia, o más bien, se satisfizo una dependencia que por alguna razón no se estaba resolviendo correctamente por sí misma.

En mi caso, si estoy en medio de un desarrollo y un error así me frena, no me doy muchas vueltas. Instalo la dependencia y sigo. Reconozco que no es una solución de raíz, pero me permite avanzar, que al final es lo que uno quiere.

¿Por qué pasa esto?

Este tipo de problemas suelen venir de cómo Next.js, especialmente las versiones más nuevas con App Router y Server Components, maneja las dependencias y el bundling.

Supabase-JS, como muchas librerías, tiene dependencias internas. Algunas de ellas pueden no estar pensadas para el entorno de Next.js de la forma en que este las está procesando, o pueden requerir módulos específicos que no siempre se instalan de forma transitiva o se exponen al runtime como se espera.

El módulo encoding es una dependencia de bajo nivel para manejar codificaciones de caracteres, algo bastante fundamental. Que no se resuelva automáticamente, me hace pensar que hay un pequeño desajuste en cómo se empaquetan o se declaran las dependencias entre Next.js y Supabase-JS en ciertas configuraciones.

¿Qué hacer entonces?

  • Si puedes vivir con el warning y tu app compila: Puedes ignorarlo por ahora y esperar a que Supabase resuelva el issue. Es la vía "oficial".
  • Si el warning te molesta o te frena: Mi recomendación es instalar encoding. Es una solución que funciona, es rápida y te deja la consola limpia. No he visto que cause otros problemas al hacerlo.

Yo, Jorge, soy de la escuela de que si una solución simple funciona y no introduce riesgos conocidos, la tomo. No me gusta sobreingeniería en algo tan básico como un error de compilación. Me frustra tener que investigar algo que debería funcionar de entrada.

Si empezara de cero con Next.js y Supabase

Si tuviera que empezar de cero y me encontrara con esto, creo que lo primero que haría sería revisar la documentación de Supabase específica para Next.js, buscando notas de compatibilidad o configuraciones adicionales.

A veces uno asume que una librería se integra de forma universal, pero la realidad es que cada framework tiene sus peculiaridades. También intentaría usar las versiones más estables y probadas de ambas librerías, incluso si eso significa no estar en el edge de la última novedad.

Al final, la velocidad de desarrollo y la estabilidad pesan más que correr detrás de la última versión si eso implica toparse con este tipo de fricciones.

Jorge RequenaDeveloper full-stack · Chile