On Demand image optimization for Netlify using ipx.
😺 Online demo: https://netlify-ipx.netlify.app
Add @netlify/ipx
as devDependency
:
# npm
npm i -D @netlify/ipx
# yarn
yarn add --dev @netlify/ipx
Create netlify/functions/ipx.ts
:
import { createIPXHandler } from "@netlify/ipx";
export const handler = createIPXHandler({
domains: ["images.unsplash.com"],
});
Now you can use IPX to optimize both local and remote assets ✨
Resize /test.jpg
(in dist
):
<img src="/.netlify/functions/ipx/w_200/static/test.jpg" />
Resize and change format for a remote url:
<img
src="/.netlify/functions/ipx/f_webp,w_450/https://images.unsplash.com/photo-1514888286974-6c03e2ca1dba"
/>
Instead of setting an allowlist on domains
, you may wish to use the option remotePatterns
. This method allows wildcards in hostname
and pathname
segments.
remotePatterns
is an array that contains RemotePattern objects:
remotePatterns: [
{
protocol: 'https' // or 'http' - not required
hostname: 'example.com' // required
port: '3000' // not required
pathname: '/blog/**' // not required
}
]
To use remote patterns, create netlify/functions/ipx.ts
:
import { createIPXHandler } from "@netlify/ipx";
export const handler = createIPXHandler({
remotePatterns: [
{
protocol: "https",
hostname: "images.unsplash.com",
},
],
});
hostname
and pathname
may contain wildcards:
remotePatterns: [
{
hostname: '*.example.com' // * = match a single path segment or subdomain
pathname: '/blog/**' // ** = match any number of path segments or subdomains
}
]
- Clone repository
- Install dependencies with
yarn install
- Build the project with
yarn build
- Run netlify development server with
yarn dev
. - Open http://localhost:8888
MIT