When migrating a blog from Hugo to Next.js, I encountered an issue regarding the usage of spaces in image names. While Hugo allowed spaces, Next.js markdown requires hyphens instead. This posed a challenge as I frequently use screenshots with default names like “Screen Shot 2022-…”.
To overcome this limitation, I implemented a script that converted the image names to use hyphens instead of spaces. For example:
"Screen Shot 2022-..."
=>
"Screen-Shot-2022-..."
I then replaced the post’s markdown content with the updated image names.
Furthermore, I had to modify the image URLs because Next.js does not support having the post in the same folder as the markdown file. To make each post image public, I adopted the format /public/images/<SLUG>/
.
Here’s an example of how I achieved this:
import matter from 'gray-matter'
// ...
let { data: frontmatter, content } = matter(fileName)
const regex = /\!\[(.*?)\]\((.*?)\)/gm
let matches
while ((matches = regex.exec(content)) !== null) {
content = content.replace(
'](' + matches[2],
`](/images/${slug}/${matches[2].replace(/ /g, '-').replace(/\//g, '')}`
)
}
By implementing these changes, I successfully resolved the image URL issue that arose during the migration from Hugo to Next.js.
Tags: image URLs, markdown, migration, Next.js, Hugo