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

@zemnmez/media.macro

v1.0.0

Published

Babel macro to load media.

Downloads

3

Readme

media.macro CircleCI

Load images using a babel macro.

Features

  • Works for images and videos
  • Optimize.
    • Keep lossless media in your project and optimize at compile time.
  • Convert.
    • Convert your media into other formats.
    • Use WebP with PNG fallbacks.
  • Create responsive sizes.
    • Load media at the lowest resolution needed for crisp display.
  • Gives you dimension information so you can avoid layout thrashing.

Usage

To use this you must install and configure babel-plugin-macros.

npm install media.macro
# or
yarn add media.macro

Input

import media from 'media.macro'

const MyImage = media('./my-image.png')

Output

const MyImage = {
    height: 100,
    width: 100,
    // included if the file is an image
    imgBase64: '...',
    imgSrc: '...',
    imgWebPSrc: '...',
    imgSrcSet: '...',
    imgWebPSrcSet: '...',
    imgBase64: '...',
    // included if the file is a video
    videoSrc: '...',
    videoPosterSrc: '...',
    videoPosterWebPSrc: '...',
    videoPosterBase64: '...',
}

Displaying the Image

This macro will work well with react-fast-image. This is optional though, you can consume the output however you want.

import FastImage from 'react-fast-image'
import media from 'media.macro'

const MyComponent = () => <FastImage {...media('./my-image.png')} />

Options

You can pass options to the media macro.

Two important options are outputPath and publicPath. These options determine where the output media files go in the file tree, and how to build the URL for them.

import media from 'media.macro'

const MyImage = media('./my-image.png', {
    maxWidth: 1024,
    toImgFormat: 'png',
    toVideoFormat: 'mp4',
    toVideoPosterFormat: 'png',
    // For create-react-app these could be:
    outputPath: 'public/static',
    publicPath: 'static',
})

Global Options

Since you probably want the options set globally for this macro you can use babel-plugin-macros.config.js to configure it as well. This should be in the same directory as your .babelrc.js file.

// babel-plugin-macros.config.js
module.exports = {
    media: {
        publicPath: 'static',
        outputPath: 'public/static',
    },
}

License

MIT