NuxtJS - The Vue.js Framework
A raiz de otro hilo, habían muchísimas personas ( 3 ) diciendome que creara un hilo de NuxtJS y, aunque tampoco lo he tocado mucho en profundidad, lo dejo por aqui creado por si a alguien lo está utilizando y tiene alguna duda o, si alguien no lo conoce y se anima a ponerse con el, que tenga un sitio por donde empezar.
De todas formas, en su guía oficial viene todo bastante bien explicado: https://nuxtjs.org/guide
¿Por qué NuxtJS?
NuxtJS es un framework de VueJS. Nace con la idea de mejorar varios aspectos o problemas que podemos encontrar con el desarrollo de VueJS como, por ejemplo, la compatibilidad con SEO (sin necesidad de SSR), pero quien mejor que ellos para explicarlo:
A nivel personal, lo que me gusta:
- Estandariza la estructura de carpetas para aplicaciones con VueJS
- Viene preconfigurado con VueX, Vue Router y Vue Meta
- Como he mencionado anteriormente, es SEO friendly incluso sin necesidad de SSR
- Las rutas se configuran automáticamente a raiz de tus archivos
- Ocupa 60kB min+gzip (57kB sin Vuex).
Estructura de carpetas - Doc Oficial
Aunque las carpetas son autoexplicativas, NuxtJS crea la siguiente estructura:
Assets
Assets sin compilar como imágenes, fuentes, css/sass
Components
En esta carpeta irían los componentes que vayas a reutilizar en varios sitios de tu proyecto.
Layouts
Cuando creemos nuestras páginas, podemos configurarlas con distintos layouts (por ejemplo, contenido al 100% vs contenido + sidebar), que irán directamente en esta carpeta.
Middleware
En esta carpeta pondrás las distintas funciones que quieras ejecutar antes de la carga de tus páginas.
Pages
En este directorio van las distintas páginas de tu proyecto. NuxtJS utiliza automáticamente los archivos de esta carpeta para crear las rutas finales de la aplicación
Por ejemplo, la página about.vue
, es accesible desde localhost:3000/about
Plugins
En esta carpeta es donde pondrás los plugins que registres globalmente
Static
Esta carpeta se mapeará directamente a la raiz de la aplicación, por lo que los archivos que pongas en esta carpeta serán accesibles desde /
Por ejemplo:
static/favicon.ico
=>localhost:3000/favicon.ico
static/robots.txt
=>localhost:3000/robots.txt
Store
En esta carpeta meteras los archivos relacionados con Vuex. Inicialmente Vuex viene desactivado y en esta carpeta no viene ningún archivo, pero en el momento que agregues uno, Vuex se activará automáticamente.
Archivo nuxt.config.js
Aunque no es un directorio, la configuración principal de la aplicación la harás a través de este archivo. Puedes ver todas las posibilidades aqui: https://nuxtjs.org/guide/configuration
Como empezar con NUXT - Install
Parar crear un proyecto, se necesita tener NodeJS instalado en el equipo. A partir de ahí, tendremos disponible el comando npx create-nuxt-app NombreProyecto
.
Con este comando, nos creará una carpeta con el nombre del proyecto indicado en el directorio en el que lo ejecutemos y nos hará varias preguntas para preconfigurar NuxtJS:
- Nombre del proyecto
- Descripción del proyecto
- Si queremos algún framework para el servidor:
- Si queremos implementar alguna característica o librería concreta en el proyecto (multiseleccion)
- Si queremos algún framework para UI
- Si queremos un framework para tests unitarios
- None
- Jest
- AVA
- El tipo de renderización
- Universal ( SSR )
- SPA
- El nombre del author
- El gestor de paquetes ( npm o yarn )
Como ejemplo, para el hilo he configurado algo tal que así:
Sobre la elección, en concreto:
- PWA: Aunque sea algo que no sepas ni lo que es, es interesante activarlo si en producción vas a tener un certificado SSL instalado, ya que te podrás aprovechar de varias características que incluye PWA por defecto en NuxtJS como por ejemplo el cacheo de assets y visualización offline a través de los workers con Google Workbox
- Axios: Librería para ajax.
- Element-UI: Es un framework al que estoy acostumbrado. Lo utilizo básicamente para notificaciones en pantalla, loadings entre operaciones y algun campo en concreto, como los calendarios. Actualmente tiene un bug para NuxtJS y hay que desactivarlo en SSR
Comandos de desarrollo/producción
Una vez tenemos inicializado el proyecto, tal y como aparece en el pantallazo, disponemos de varios comandos para iniciar el desarrollo:
npm run dev
: Inicia el servidor en local.npm run build && npm run start
: Hace una build del proyecto para producción y lo lanza.npm run generate
: Crea una build con los archivos necesarios para distribuir tu proyecto en un servidor web simple sin necesidad de usar tecnología SSR.
Seo Friendly
Como he mencionado anteriormente, una de las cosas que me gustan de NuxtJS es que sin necesidad de tecnología SSR en el servidor te puede generar una build con los contenidos de la página. Para ello, cuando inicia la build monta su propio servidor en local y genera los HTMLs con el contenido que debería de tener al final.
Como igual explicado no es muy facil de entender, os pongo un ejemplo práctico:
En el caso de Angular, si generas una build para producción sin SSR, el HTML final (y lo que ve el bot de google) es de este estilo y, a partir de aqui, carga Angular:
En el caso de NuxtJS, cada HTML tiene el contenido final, por lo que Google lo puede leer y, a partir de ahí, NuxtJS carga el resto. Aunque en el pantallazo veais data-server-rendered=true
es porque lo ha generado en local, pero es una web estática final:
https://dist-kpzgiisgcj.now.sh
Para terminar
Para terminar ya con el post, que ha quedado más largo de lo que me gustaría, os dejo un link a la cheatsheet de NuxtJS para que la tengais a mano: https://dist-kpzgiisgcj.now.sh/cheatsheet.pdf
Trae más cosas de las que he hablado, pero entre la documentación oficial y la cheatsheet, yo creo que podeis empezar a trastear bastante xD
Pues ala, a ver si no se muere el post y a alguien le vale de algo xD