最近,我試圖將我的基於 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, '')}` ) }