Por padrão, a otimização de imagens do Next.js integrada fica desativada no App Hosting, a menos que você defina explicitamente images.unoptimized
como "false" ou use um carregador de imagens personalizado.
É possível configurar um carregador de imagens global do Next.js com a extensão do Firebase de processamento de imagens para ativar a otimização e a entrega sob demanda de imagens no app Next.js em App Hosting.
Pré-requisitos
- Você tem um projeto do Firebase e um back-end App Hosting.
- O Cloud Storage está ativado no seu projeto.
- O Cloud Functions for Firebase está ativado no seu projeto.
Instalar a extensão
Acesse a Extensão de processamento de imagens no Hub de extensões do Firebase e selecione Instalar no console do Firebase. Siga as instruções na tela.
Configurar a otimização de imagens locais (opcional)
Se o aplicativo usa imagens locais que você quer otimizar com essa extensão, configure o parâmetro "Hostname" durante o processo de instalação da extensão.
Durante a configuração da extensão:quando você chegar à etapa "Configurar extensão", localize o parâmetro "Nome do host".
Defina o nome do host:insira o domínio padrão para seu back-end do Firebase App Hosting. Normalmente, esse domínio termina com
.hosted.app
.
Quando a instalação for concluída, a API Image Processing será implantada como uma função em Cloud Functions. Navegue até o painel Functions no console Firebase e copie o URL de acionamento da API Image Processing.
Configurar um carregador de imagens personalizado
Crie um carregador de imagens que use a API Image Processing implantada para cada componente de imagem otimizado. Como uma otimização, reescreva para que ele seja veiculado no mesmo domínio App Hosting do Firebase e armazenado em cache na mesma CDN global que seu aplicativo Next.js.
Primeiro, adicione os seguintes campos ao arquivo
next.config.js
:
// @ts-check
/** @type {import('next').NextConfig} */
const nextConfig = {
images: {
loader: "custom",
loaderFile: "./loader.js",
},
async rewrites() {
return [
{
source: "/_fah/image/:path*",
destination:
"<CLOUD_FUNCTIONS_URL>/:path*",
},
];
},
}
module.exports = nextConfig;
Em seguida, crie um arquivo loader.js
no diretório raiz com o seguinte
conteúdo:
"use client"
export default function myImageLoader({ src, width, quality }) {
if (process.env.NODE_ENV === "development") {
return src;
}
const operations = [
{
operation: "input",
type: "url",
url: src,
},
{ operation: "resize", width: width },
{ operation: "output", format: "webp", quality: quality || 75 },
];
const encodedOperations = encodeURIComponent(JSON.stringify(operations));
return `/_fah/image/process?operations=${encodedOperations}`;
}
Crie uma confirmação que inclua essas mudanças e envie para sua ramificação ativa. Aguarde a conclusão do lançamento do App Hosting.