2

Delivering images with next.js and rokka

 3 years ago
source link: https://www.liip.ch/en/blog/delivering-images-with-next-js-and-rokka
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Delivering images with next.js and rokka

The built in image component of the react framework next.js makes it possible to include responsive images from rokka in the right size and format with just a few lines of code.

Discover more about the services Custom Development and CMS our digital agency has to offer for you.

Since version 10, next.js has a built in image component to make including images easy, responsive and optimized. It can do that with images stored on the server, but also with images stored on one of the many cloud based image optimization services. The usual suspects like cloudinary, imgix, etc are included in next.js. But we can also write a custom loader for our image optimization service rokka.

First write the custom image loader into some file in your setup like the following.
Of course, you can also use a defined rokka stack instead of the dynamic one used here. We also add the rokka stack option autoformat (or in short af) to deliver the best format the browser supports. Like WebP or JPEG-XL.

export const rokkaLoader = ({ src, width }) => {
    return `https://liip.rokka.io/dynamic/resize-width-${width}/o-af-1/${src}`
}

It's also recommended to define your device width breakpoints in next.config.js to avoid too many different sizes

module.exports = {
  images: {
    deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048],
  },
}

And then, whenever you want to display an image from rokka, you add the rokkaLoader defined above with the loader attribute from the Image component and use the rokka hash and some image name plus the format as the src.

import {rokkaLoader} from '../src/rokka.ts'
import Image from 'next/image'

...
 <Image
  src={'ad8472/some-name.jpg'}
  objectFit={'cover'}
  layout={'fill'}
  loader={rokkaLoader}
/>

The image name is optional, therefore ad8472.jpg would also work. But we recommend to use an image name for improved Search Engine Optimization.

You still have to upload the images to rokka before being able to use them here. For example with the rokka Dashboard. And then copy the hash from there. But depending how you manage your images and how your users are adding them, you can maybe automate this with the help of rokka.js.


Photo by Raj Rana on Unsplash


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK