Publicar um site React ou Vue: a pasta de build, e o 404 ao atualizar a página

Um site feito em React ou Vue (com o Vite ou com as ferramentas mais antigas) não corre no servidor: compila-se no seu computador para uma pasta de ficheiros estáticos, e é essa pasta que se publica. Funciona em qualquer hospedagem, sem Node. Os dois problemas clássicos são a pasta errada no sítio errado e a página que dá 404 ao atualizar (F5) numa rota que não é a inicial. Ambos têm solução em poucos minutos.

Compilar e publicar

1 Compile: npm run buildO resultado fica numa pasta que depende da ferramenta: dist no Vite e no Vue CLI, build no antigo Create React App.
2 Envie o conteúdo dessa pasta, não a pasta em si, para a pasta pública do domínio. O index.html tem de ficar logo à raiz. Se precisar do passo a passo do FTP: enviar o site com o FileZilla.
3 Abra o site numa janela anónima, para não ver uma versão guardada pelo navegador, e navegue pelas ligações.
4 Atualize a página numa rota interna (por exemplo /contactos). Se aparecer um 404, siga a secção seguinte.

Porque dá 404 ao atualizar

Numa aplicação de página única, quem trata de /contactos é o JavaScript, no navegador. No servidor não existe nenhum ficheiro com esse nome, por isso um pedido directo (ou um F5) recebe 404. A solução é mandar o servidor devolver o index.html sempre que o ficheiro pedido não exista. O servidor da hospedagem lê o .htaccess, por isso cria-se um na pasta pública:RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]

Se não quiser mexer no servidor, o Vue Router tem o modo hash (createWebHashHistory), em que os endereços levam um # e nunca dão 404. É menos bonito, e mais simples.

O que se vê, e o que é

Sintoma Causa habitual O que fazer
Página em branco; a consola mostra 404 em ficheiros .js e .css O site está numa subpasta e o build assume a raiz, ou os ficheiros ficaram na pasta errada. Diga ao build onde vive: base no vite.config, homepage no package.json do Create React App, e o basename do router. Compile de novo.
404 ao atualizar uma rota Falta a regra do .htaccess. Use o bloco acima.
Continua a aparecer a versão antiga Cache do navegador, que guardou o index.html. Recarregue sem cache (Ctrl+F5) ou abra uma janela anónima. Veja a cache do navegador com .htaccess.
Os pedidos à API vão para localhost O endereço da API foi fixado na compilação. Defina-o antes de compilar, na variável do projecto (VITE_... no Vite), e compile de novo.
Num site estático não há segredos. Tudo o que vai para o build (incluindo as variáveis com prefixo como VITE_ ou REACT_APP_) fica visível para qualquer visitante. Chaves privadas e senhas ficam num servidor, nunca no código do navegador. Quando o site precisa de falar com a sua API, veja o erro de CORS.
Ao actualizar, envie primeiro, apague depois. Os ficheiros do build têm nomes com um código que muda a cada compilação. Se apagar a pasta antiga antes de enviar a nova, quem tem o site aberto fica com a página partida até recarregar. Envie os ficheiros novos e só depois retire os antigos.

Publicou e o site não aparece como devia? Diga-nos o domínio e o que vê.

Abrir um pedido de suporte

VEJA TAMBÉM

Publicar uma aplicação Next.js: exportação estática ou servidor Node

Cache do navegador com .htaccess

.htaccess para projectos PHP: URLs amigáveis e redireccionamentos

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 396,00 MT/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?