O Quasar-Framework é tipo as facas Ginsu dos frameworks Vue.
Ele pode fazer um simples SPA e pronto, mas ao mesmo tempo ele pode pegar o código desse SPA e gerar também um novo modo como PWA, SSR, Capacitor, Cordova e Electron.
Quando você adiciona um novo modo ele adiciona novos arquivos exclusivos a este modo que serão utilizados somente por este modo.
O Quasar-Framework possuí uma camada de abstração de arquivos chamados boot.
Estes arquivos são como plugins de inicialização de uma aplicação, no qual são executados em ordem de instanciação e tem acesso total ao objeto da aplicação antes dela estar finalizada para o render.
export default async ({
app,
router,
store,
Vue,}) => {
/*
* You will have access to
* everything on the Vue application
* never call a new Vue here.
* You can use async/await
*/
}
// quasar.conf.js
return {
// ...
boot: [
// runs on both server & client
'some-boot-file',
// boot file only on client-side
{ path: 'some-other', server: false }
// boot file only on server-side
{ path: 'third', client: false }
]
}
Quando trabalhamos com SSR, sempre ao renderizar uma tela, podemos ter de carregar algum dado do servidor ou de algum banco de dados.
O Quasar-Framework tem a possibilidade de criar um lifecycle hook chamado preFetch, ele quando utilizado é sempre executado antes do componente ser disponibilizado para o cliente.
O Quasar-Framework possui algumas exclusividades especiais quando trabalhado em modo SSR, que ajudam o desenvolvedor a separar a aplicação do servidor entre outras coisas, essas são:
<template>
<div>{{ item.title }}</div>
</template>
<script>
export default {
preFetch ({ store, currentRoute, previousRoute, redirect, ssrContext }) {
/* Busca dados, valida rota, redireciona ou qualquer regra...
* ssrContext só está disponível no modo SSR e no servidor
* Sem acesso ao "this", pois o preFetch() é executado
* antes do componente ser montado.
* Returna uma Promise se for um hook asíncrono
*/ Example:
return store.dispatch('fetchItem', currentRoute.params.id)
},
computed: {
item () {
return this.$store.state.items[this.$route.params.id]
}
}
}
</script>
// quasar.conf.js
return {
preFetch: true
}
Vamos partir para a parte prática. Vamos instalar o Quasar-Framework e começar nosso primeiro projeto SSR.
$ npm install -g @quasar/cli
# Criando o projeto
$ quasar create <nome_pasta> && cd <nome_pasta>
# Adicionando o modo SSR
$ quasar mode add ssr
# Iniciando o desenvolvimento
$ quasar dev -m ssr
O Quasar-CLI nos permite agilizar o processo de criação de novos componentes, páginas, layouts e stores. Facilitando ainda mais o desenvolvimento da aplicação e agilizando o desenvolvimento.
# Criando uma nova página
$ quasar new page <pagina>
# Criando um novo componete
$ quasar new component <componente>
# Criando um novo layout
$ quasar new layout <layout>
# Criando um novo Vuex Store
$ quasar new store <store>
Sempre que criamos uma nova página ou novo layout para ser um parent route, temos de atribuir ele no routes.js
Sempre que é criado um novo Vuex store temos de atribuir ele no store/index.js
O Quasar-Framework trouxe uma possibilidade de uma camada de extensões ou plugins para a aplicação, assim como o Vue-CLI.
Nesta camada podemos utilizar extensões oficiais ou criadas pela comunidade para adicionar novas funcionalidades ao nosso projeto.
# Instalando uma nova extensão
$ quasar ext add <extensao>
# Removendo uma extensão
$ quasar ext remove <ext-id>
Algumas extensões oficias importantes.