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

remark-plugin-colocate-images

v0.2.0

Published

Copy images to another path during parsing

Downloads

9

Readme

Co-Locate Images

The Problem

You want to store images with your content for example content/posts/post-slug/image.jpg but that path isn't part of your final build. You either have to move your images to a path under public which results in content being split, otherwise you need to base64 encode them as data urls.

The Solution

remark-plugin-colocate-images fixes this by copying images from your content path to a spcified folder. Allowing you use ./image.jpg in your markdown which gets replaced with /img/image.jpg in the compiled output.

Usage

npm-install --save remark-plugin-colocate-images

Where ever you compile your markdown add a remark plugin like so:

import remark from 'remark'
import {colocateImagesPlugin} from "../remark-plugin-colocate-images"

const result = await remark()
  .use(colocateImagesPlugin({
    diskRoot: '/path/to/post/directory', // Where on the disk is the posts content, e.g. index.md and image.jpg
    diskReplace: '/path/to/public/directory/img', // Where on the disk should files be copied to
    urlReplace: '/img/', // Needs the trailing slash, replaces `./` in the image path.
  }))
  .process()

Options

colocateImagesPlugin takes a few arguments:

|Option|Default|Required|Description| |:-----|:------|:------:|:----------| |diskRoot|-|Yes (unless using handleImage)|Where on the disk is the content stored| |diskReplace|path.join(process.cwd(), 'public', 'img')|No|Where should images be copied to.| |search|/^\.\//|No|The Regex pattern to determine if an image should be copied.| |urlReplace|/public/img/|No|The Url to replace search with.| |handleImage|undefined|No|See Below|

handleImage

Al alternative to specifying replacements is handleImage. You can supply a function that returns either a string or a Promise that returns a string.

The returned string in either approach needs to be the new image source for the outputted html

Supplying a handleImage skips the usual file copy mechanism and instead relies entirely on your implementation.

For example:

colocateImagesPlugin({
  handleImage: async (src) => {
    const cdnSrc = await myCDN.upload(src)

    return cdnSrc
  }
})