默认情况下,除非您明确将
images.unoptimized
设置为 false 或使用自定义图片
加载器。,否则App Hosting上会停用内置Next.js 图片
优化功能。
您可以使用 Image Processing Firebase 扩展程序配置 Next.js 全局图片加载器,以便在 App Hosting上按需优化和传送 Next.js 应用中的图片。
前提条件
- 您拥有 Firebase 项目和 App Hosting 后端。
- Cloud Storage 在您的项目中已启用。
- Cloud Functions for Firebase 您的项目中已启用。
安装扩展程序
在 Firebase Extensions Hub 中找到 Image Processing 扩展程序,然后选择 Install in Firebase Console(在 Firebase 控制台中安装)。按照屏幕上的说明操作。
配置本地图片优化(可选)
如果您的应用使用本地图片,并且您希望使用此扩展程序优化这些图片,则需要在扩展程序安装过程中配置“Hostname”(主机名)参数。
在扩展程序配置期间: 当您到达“Configure extension”(配置扩展程序)步骤时,找到“Hostname”(主机名)参数。
设置主机名: 输入您的 Firebase App Hosting后端的默认网域。此网域通常以
.hosted.app结尾。
安装完成后,Image Processing API 应作为 函数部署在 Cloud Functions 中。前往 函数 信息中心,然后复制 Image Processing API 触发器网址。Firebase
设置自定义图片加载器
创建一个图片 加载器 ,该加载器将已部署的 Image Processing API 用于每个经过优化的图片 组件。作为 优化措施, 请将其重写为 在 Next.js 应用的同一 Firebase App Hosting 网域下传送,并 缓存在同一全局 CDN 后面。
首先,将以下字段添加到
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;
然后在根目录中创建一个 loader.js 文件,其中包含以下内容:
"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}`;
}
创建一个包含这些更改的提交,并将其推送到正式版分支。 然后,等待 App Hosting 推出完成。