Lo que hice
Tengo una pequeña API escrita en TypeScript, para mi blog. Decidí desplegarla en Vercel aprovechando su soporte para funciones serverless. La idea era transpilar el codigo y ejecutarlo en Vercel como ya lo he hecho en algunas ocasiones, pero no fue tan sencillo.
Problemas y soluciones
Había un problema al ejecutar el proyecto, Vercel no tiene soporte nativo a aplicaciones Node, no es como el resto de frameworks como React o Next donde se selecciona y listo, Vercel hace el resto, aquí no, aquí se debe crear un archivbo de configutacion
vercel.json
y definir cómo funcionará. El problema estaba a la hora de transpilar el codigo y ejecutar este javascript generado en Vercel.Otro error que tengo, que tengo que aclarar no es de Vercel, pero si me paso fue a la hora de usar imports globales, por ejemplo tenía definido el path
@/
que apuntaba a./src
para hacer más limpias las importaciones de arhivox y evitar el../../
, pero tuve un problema a la hora de transpilar el codigo y que no encontraba esa ruta.La solución sucia, una alternativa que probé fue compilar todo localmente y subir la carpeta dist al repo. De esa forma, Vercel simplemente ejecuta los archivos .js ya generados sin preocuparse por TypeScript. Pero obviamente es sucia y horrible.
¿Funciona? Sí. ¿Es elegante? Para nada.
Es básicamente renunciar a las buenas prácticas, es más un parche que una solución real.
Aprendizajes
- Debo leer más la documentación de Vercel y el resto de herramientas que utilice, así me evito problemas innecesarios, aunque la documentación en estos aspectos de Vercel podría mejorar.
- Las funciones serverless tienen sus límites. Especialmente si necesitas control sobre el entorno de ejecución.
- Compilar TypeScript fuera de Vercel y subir los archivos .js es una solución temporal. Pero no es sostenible a largo plazo, especialmente si el proyecto crece.
Próximos pasos
Después de este desastre, estoy buscando otras opciones para desplegar la API. Estoy evaluando:
- Railway: tiene buen soporte para Node.js y TypeScript, y es muy fácil de usar.
- Render: parece más flexible que Vercel y no te obliga a usar serverless si no quieres.
- VPS con Docker: más trabajo, pero también más control. Seria mas caro.
Lo único claro es que no quiero volver a pelearme con vercel.json por un simple endpoint (por ahora).