最近,我試圖將我的基於 Hugo 的部落格移植到 Next.js(結果並不理想),而在這個過程中遇到了一個問題。

Hugo 允許我在圖片名稱中使用空格,這對於使用截圖並且預設檔名為 Screen Shot 2022-... 是很方便的。

但是 Next.js 的 Markdown 則不允許使用空格。因此,我撰寫了一個腳本來將所有的圖片檔名中的空格改為連字符(hyphen)。

"Screen Shot 2022-..." 

=> 

"Screen-Shot-2022-..."

然後,我將文章的 Markdown 內容替換為改好的名稱。

同時,由於 Hugo 允許將文章放在與 Markdown 檔案相同的資料夾中,而 Next.js 則不允許這樣做。

因此,我使用了 /public/images/<SLUG>/ 的資料夾形式,將每個文章的圖片設為公共可見。

以下是我實現這個功能的程式碼:

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, '')}`
 )
}