Allen Wang

Allen Wang • 2023-04-08

Shozzle blog post introduction

範例

Description

Shozzle 首篇文章登場,大致上說明一下如何新增一篇文章的流程以及一些內容的說明

Po 文流程

可以先看一下 README 的專案資料夾結構,目前文章皆會放在 /src/pages/posts

  1. 直接在此新增 .md 檔案即可開寫
  2. 參考此篇的 關於文章的資訊 這些是必要的文章資訊
  3. 從 main branch 切出去後發 pr,基本上 po 文的話就只是走個流程會直接 merged
  4. merged 後會自動部署應該很快就可以出現在線上版了

關於文章的資訊

在 .mdx 檔案上面的資訊會是一包 frontmatter 物件

---
layout: '@layouts/BlogPostLayout.astro'
title: Shozzle blog post introduction
date: 2023-03-12
author: Allen Wang
image: { src: '/images/Allen_Avatar.png', alt: '範例' }
description: 這是一篇範例說明文章
draft: false
category: Astro
---
infodescription
layout文章共用版型 (基本不動)
title文章標題
date日期 (影響排序)
author作者 (影響分類)
image首圖 ( TBC: 預設 or 如何呈現 )
description文章說明 (影響列表說明以及 SEO meta tag 跟 title)
draft草稿 (寫一半還沒要發的時候用)
category文章類型 (影響分類)

全站的 category 會依照所有文章的 category 填什麼就自動產生,稍微注意一下同義不同字的情況

下方文章內容就正常以 markdown 語法撰寫即可

md vs. mdx

mdx 檔案比起一般 md,他多了一些功能

  • 允許變數,並以 {JSX expressions} 語法撰寫
export const variable = 'My MDX variable';

## {variable}
  • 直接使用 Frontmatter 資訊
{frontmatter.description}
  • Render components 如果要介紹元件的時候可以直接將元件 render 出來,比起看過很多文章都是用截圖的這點應該會蠻酷的
import Button from '@components/Button.astro';
import ReactCounter from '@components/ReactCounter.jsx';

Click <Button title="Contact me" />.

Here is my counter component, working in MDX:

<ReactCounter client:load />

import markdown file

專案中取得得文章的方式

// Import a single file
import * as myPost from '../pages/post/my-post.mdx';

// Import multiple files with Astro.glob
const posts = await Astro.glob('../pages/post/**/*.mdx');

藉此方式取得後再用上述的 關於文章的資訊 然後再配合我寫了個 util function organizeAllPosts 來決定我最終會拿到什麼文章