rehype-img-size
Version:
rehype plugin to set local image size properties to img tag
87 lines (59 loc) • 2.36 kB
Markdown
[](https://github.com/ksoichiro/rehype-img-size/actions/workflows/main.yaml)
[](https://codecov.io/gh/ksoichiro/rehype-img-size)
[](https://www.npmjs.com/package/rehype-img-size)
**[rehype](https://github.com/rehypejs/rehype)** plugin to set local image size properties to img tag.
This can be used to improve *Cumulative Layout Shift*: [Images without dimensions](https://web.dev/optimize-cls/#images-without-dimensions)
```
npm install rehype-img-size
```
Say we have the following file, `index.md`:
```markdown

```
And our script, `example.js`, looks as follows:
```js
import {unified} from 'unified'
import parse from 'remark-parse'
import remark2rehype from 'remark-rehype'
import stringify from 'rehype-stringify'
import * as vfile from 'to-vfile'
import rehypeImgSize from 'rehype-img-size'
unified()
.use(parse)
.use(remark2rehype)
.use(rehypeImgSize)
.use(stringify)
.process(vfile.readSync('index.md'), function(err, file) {
if (err) throw err
console.log(file.value)
})
```
Now, running `node example` yields:
```html
<p><img src="img.png" alt="" width="640" height="480"></p>
```
See examples/esm directory for the entire code.
You can also keep using this as a CommonJS package. See examples/cjs directory.
Add `width` and `height` properties to `img` tag which refers local image file.
This plugin read the target file to know the size of the image, so file path must be able to resolve.
Supported formats depend on [image-size](https://www.npmjs.com/package/image-size).
Directory to resolve image file path.
This is useful when Markdown files and image files are located in the separate directories.
If you use this plugin for [nuxt/content](https://content.nuxtjs.org/), you can use it by configuring your `nuxt.config.js` like below:
```js
content: {
markdown: {
rehypePlugins: [
[ 'rehype-img-size', { dir: 'static' } ]
],
```
MIT © ksoichiro