npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@siteone/react-img-microservice

v1.0.0

Published

Companion component for @siteone/img-microservice

Downloads

460

Readme

@siteone/react-img-microservice

React komponenta pro obrázkovou mikroslužbu. Zjednodušeně řečeno, můžete react-image použít jako náhradu klasického , jen už nemusíte řešit optimalizaci obrázků.

Obsah

Požadavky

  • React 16.x.x

Funkce

  • Formát - automatická detekce podpory webp v prohlížeči

    • řeší se pouze jednou na úrovni provideru, mikroslužba vždy vrátí webp formát pokud jej prohlížeč podporuje, jinak vrátí původní formát
    • pro SSR by se tato funkcionalita mela vypnout pres disableWebpSupportCheck, uzivatel jinak bude stahovat dva obrazky. Ideálně používat siteone CDN, která řeší webp za nás.
  • Retina a responsivní obrázky (srcSet)

    • Image componenta si defaultně říká i o retina obrázky. Pokud zadáme width jako pole velikostí, místo retiny se nám srcSet nastaví jako responsivní obrázek
  • Změna velikosti

    • můžeme si říct pomocí parametrů width a height jakou přesně velikost obrázku chceme vrátit
    • a za pomoci parametru scaleMode můžeme nastavit jakym způsobem chceme, aby se obrázek oříznul
  • Progresivní obrázek (Progressive)

    • wiki
    • v podstatě u většiny prohlížečů už je toto pro nás nepoužitelné, protože webp tuto funkci nepodporuje (je dost rychly i bez toho)
  • Rotace (Rotate)

    • násobky 90°
  • Převrácení stran (Flip)

    • převrátí buď x nebo y osu
  • Rozmazání (Blur)

    • 0.3 - 1000
  • Kvalita (Quality)

    • 0 - 100%
  • Možnosti, které nám microslužba nabízí, ale ještě je nemáme zapracované:

    • Výřez
    • Overlay image (watermark)

Používání

Instalace

```bash
yarn add @siteone/react-img-microservice
```

ImageProvider

Nejprve musíme nadefinovat, kterou microslužbu budeme chtít používat. Budeme mít jednu obecnou img.siteone.cz, která bude určená pro testing a malé projekty (např. web S1). Velké projekty budou mít vlastní mikroslužbu na své doméně.

Někde na nejvyšší úrovni aplikace:

import { ImageProvider } from '@siteone/react-img-microservice'

const App = () => (
  <ImageProvider microserviceUrl="https://img.siteone.cz" baseImgComponent="img" baseImgBoxComponent="div">
    // ... layout, children, w/e
  </ImageProvider>
)

Pak už můžeme kdekoliv v projektu využívat komponenty Image a ImageBox

import { Image, ImageBox } from '@siteone/react-img-microservice'

const Foo = () => (
  <div>
    <Image src="/assets/image/bar.png" width={600} height={400} alt="foo bar" />
    <ImageBox src="/assets/image/bar.png" width={600} height={400} className="foobar" />
  </div>
)

API

ImageProvider

Jak název napovídá, ImageProvider je komponenta, která nastavuje context pro všechny obrázky v aplikaci. Nedělá ale jen to, ale i zjišťuje zdali náš prohlížeč podporuje úžasný webp formát a říká komponentám jaký formát obrázku pro výstup má použít.

Jaké props komponenta přijámá

microserviceUrl : string [required]

url mikroslužby

  • každý velký projekt bude mít vlastní službu, abychom rozmělnili náročnost na server a potenciální útoky a abychom měli jistotu, že nám pád jedné služby nerozbije všechny projekty
<ImageProvider microserviceUrl="https://img.siteone.cz" />

disableWebpSupportCheck: boolean [optional]

Provider přestane v prohlížeči kontrolovat zda podporuje webp. Mělo by se používat při SSR, nebo když používáme s1 CDN.

baseImgComponent : React.Node | string [optional] (default: "img")

Možnost nastavit celé aplikaci komponentu, která se bude renderovat při použití <Image />

  • defaultně používáme klasický img tag pro zpětnou kompatibilitu se staršími projekty
  • na nových projektech budeme chtít použít proxy komponentu <Element is="img" />, abychom mohli Image komponentu skinovat stejně jako ostatní komponenty DS
  • na AirBank například použijeme proxy komponentu <Box tag="img" /> z frack-components
// AB
const ImgComponent = () => <Box tag="img" />

// DS
const ImgComponent = () => <Element is="img" />

<ImageProvider baseImgComponent={ImgComponent} />

baseImgBoxComponent : React.Node | string [optional] (default: "div")

Stejně jako baseImgComponent, máme možnost nadefinovat komponentu, která se bude renderovat při použití <ImageBox /> komponenty

// AB
import { Box } from 'frack-components'

// DS
const Box = () => <Element is="div" />

<ImageProvider baseImgBoxComponent={Box} />

Image a ImageBox

Kompmonenty, které budeme nejvíce používat. Jsou context consumers a obě přijímají až na pár vyjímek stejné props, které definuji níže.

<Image /> komponenta je přímá náhrada html tagu <img />. Mimo běžných attributů, který běžný <img /> očekává, přijímá komponenta další, které předá mikroslužbě pro práci s obrázkem.

<ImageBox /> použijeme, když chceme použít optimalizovaný obrázek jako css pozadí jakékoliv komponenty. Defaultní render komponentu nastavíme v provideru, ale přes attribut tag ji můžeme lokálně přetížit. Render komponenta musí splňovat jedinou podmínku, musí umět přijmout style attribut, kde dostane background-image.

Jaké props komponenty přijímají

tag : React.Node | string [optional] (default: nastavení v provideru)

Možnost lokálně přepsat render komponentu.

src : string [required]

Cesta k obrázku

width : number | number[] [optional]

height : number | number[] [optional]

rotate : 0 | 90 | 180 | 270 [optional]

quality : number [optional]

v procentech, tedy 0-100

blur : number [optional]

0.3 - 1000

progressive : boolean [optional]

pro nás už není tolik podstatné, protože webp tuto funkcionalitu nemá, ale pokud u jpegu chceme upřednostnit rychlost načtení před kvalitou.

scaleMode : | 'fit' | 'downfit' | 'upfit' | 'fill' | 'fillAuto' | 'fillCenter' | 'fillNorth' | 'fillNortheast' | 'fillNorthwest' | 'fillEast' | 'fillWest' | 'fillSouth' | 'fillSoutheast' | 'fillSouthwest' optional

flip : 'x' | 'y' [optional]

Externí součásti

  • https://git.siteone.cz/frontend/img

Správa a rozvoj projektu

Tomáš Sláma

Licence

MIT © 2018 SiteOne, s.r.o