Middle
Como funciona a recarga rápida (hot reload) no exemplo do Vue CLI?
sobes.tech IA
Resposta da IA
O Vue CLI utiliza o webpack-dev-server, que inclui o Hot Module Replacement (HMR).
O processo de funcionamento do HMR para Vue é o seguinte:
- Iniciar o servidor de desenvolvimento: Ao executar
npm run serve, o webpack-dev-server inicia o servidor e começa a monitorizar os ficheiros do projeto. - Alteração do ficheiro: Quando o desenvolvedor guarda alterações num ficheiro (
.vue,.js,.css, etc.). - Detecção de alterações: o webpack-dev-server detecta a alteração.
- Reconstrução do módulo: o Webpack recompila o módulo alterado (por exemplo, um componente Vue).
- Envio da atualização: o webpack-dev-server envia o pacote de atualizações (hotswap update) ao navegador via WebSocket.
- Aplicação da atualização: a parte cliente do HMR (integrada no código de build), ao receber o pacote, tenta aplicá-lo. Para os componentes Vue, isso significa substituir a definição antiga do componente pela nova, mantendo o estado atual das instâncias do componente (por exemplo, os dados em
data()). - Atualização do DOM: o Vue atualiza reativamente o DOM usando o novo template ou lógica do componente, sem recarregar toda a página.
Exemplo de estrutura do pacote de atualizações:
{
"hash": "...", // Hash da build
"c": { // Partes da build atualizadas
"src/components/HelloWorld.vue": true // Módulo a atualizar
}
}
O código cliente do HMR recebe este pacote e executa a lógica de atualização para src/components/HelloWorld.vue.
// Exemplo de pseudocódigo dentro do código cliente HMR
if (module.hot) {
module.hot.accept('./components/HelloWorld.vue', function() {
// Lógica de atualização do componente Vue, mantendo o estado
// Normalmente, isso é gerido pelo vue-loader em conjunto com o webpack-dev-server
});
}
Assim, ao modificar um componente, apenas esse componente na memória do navegador é atualizado, e não toda a página, o que acelera significativamente o desenvolvimento.