<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Morroa Blog</title>
    <link>https://morroa.com/</link>
    <description>一个支持 Markdown 文章、标签、归档、搜索、RSS 与深色模式的现代静态博客。</description>
    <language>zh-CN</language>
    <lastBuildDate>Fri, 18 Sep 2026 06:42:55 GMT</lastBuildDate>
    <atom:link href="https://morroa.com/rss.xml" rel="self" type="application/rss+xml"/>

    <item>
      <title>第一篇文章</title>
      <link>https://morroa.com/blog/hi</link>
      <guid isPermaLink="true">https://morroa.com/blog/hi</guid>
      <pubDate>Thu, 17 Sep 2026 00:00:00 GMT</pubDate>
      <description>欢迎来到我的博客，从这里开始记录学习、实践与成长。</description>
      <content:encoded><![CDATA[------------------------------

欢迎来到 **Morroa**。

这是我的第一篇文章，也是这个博客的开始。

我一直想有一个属于自己的地方，用来记录学习过程中遇到的问题、解决方法，以及一些自己的思考。

所以，我决定从这里开始。

## 为什么开始写博客

在学习的过程中，经常会遇到一些问题。

有些问题花了很长时间才解决，解决之后却发现，过了一段时间又忘记了当时是怎么解决的。

有些知识刚开始觉得自己已经理解了，过一段时间再次遇到，却发现很多细节已经记不清了。

所以，我想通过博客把这些内容记录下来。

以后遇到相同的问题，可以回来查看；过一段时间回头看，也可以看到自己一路学习和成长的过程。

## 这个博客会记录什么

这个博客主要会记录我的学习和实践过程。

例如：

* Git 和 GitHub 的学习
* HTML、CSS、JavaScript
* Next.js 和网站开发
* 编程过程中遇到的问题
* 一些常用工具的使用方法
* 项目开发过程
* 对一些知识点的理解和总结

有些文章可能只是记录一个很简单的问题。

但我认为，只要是自己认真学习和解决过的问题，都值得记录下来。

## 这个博客能做些什么

这个博客使用 **Markdown** 写作。

目前支持：

* 使用 Markdown 写作
* 支持 GFM 表格、任务列表、代码块和引用
* 自动生成文章目录和阅读进度
* 支持标签和文章归档
* 支持全文搜索
* 支持相关文章
* 支持深色模式
* 支持移动端适配
* 支持 SEO 元数据和 JSON-LD
* 可以静态导出到 GitHub Pages 或 Vercel

通过 Markdown，我可以更加专注于文章本身，而不用花太多时间处理页面结构。

## 我的写作方式

每篇文章都可以通过 Markdown 文件进行编写。

例如：

```md
---
title: "文章标题"
description: "文章简介"
date: "2026-09-17"
tags: ["示例"]
---

这里是文章正文。

## 二级标题

这里可以继续写文章内容。
```

只要按照规定的 Frontmatter 格式编写，博客就可以自动读取文章的信息并生成对应的页面。

## 从简单开始

我不希望一开始就要求自己写出多么复杂的文章。

一个刚刚解决的问题，一段经常使用的代码，一次项目实践，或者一个最近才理解的知识点，都可以成为一篇文章。

写博客不一定要从复杂的内容开始。

**记录下来，本身就是一种积累。**

## 写在最后

这是我的第一篇文章。

现在的博客可能还不够完善，我自己也还有很多东西需要学习。

但没有关系。

先开始，再慢慢改进。

以后，我会把学习过程中遇到的内容一点一点记录在这里。

希望未来回头看这些文章的时候，能够看到自己的变化，也能够看到自己从这里一步一步走过来的痕迹。

> 持续记录，比偶尔完美更重要。

欢迎来到 **Morroa**。

从第一篇文章开始。



]]></content:encoded>
    </item>
    <item>
      <title>你好，Morroa</title>
      <link>https://morroa.com/blog/hello-morroa</link>
      <guid isPermaLink="true">https://morroa.com/blog/hello-morroa</guid>
      <pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate>
      <description>欢迎来到这个由 Markdown 驱动的静态博客。</description>
      <content:encoded><![CDATA[
欢迎来到 Morroa。

这是一个为“写作者优先”而设计的博客。你只需要把 Markdown 文件放进 `content/posts`，构建系统就会自动生成文章页、标签页、归档页、搜索索引和 RSS。

## 这个博客能做些什么

- 使用 Markdown 写作，支持 GFM 表格、任务列表、代码块和引用
- 自动生成文章目录和阅读进度
- 支持标签、归档、全文搜索与相关文章
- 自带深色模式、移动端适配、SEO 元数据和 JSON-LD
- 可静态导出到 GitHub Pages 或 Vercel

## 写作方式

```md
---
title: "文章标题"
description: "文章简介"
date: "2026-09-14"
tags: ["示例"]
---

这里是正文。
```

只要遵循上面的 Frontmatter 格式，一切都会自动完成。

## 从一篇好文章开始

写作并不需要从复杂开始。记录一个刚解决的问题，整理一段反复使用的代码，或者写下你最近的思考，都是很好的起点。

> 持续记录，比偶尔完美更重要。

去 `content/posts` 创建你的第一篇文章吧。
]]></content:encoded>
    </item>
    <item>
      <title>Markdown 写作完全指南</title>
      <link>https://morroa.com/blog/markdown-guide</link>
      <guid isPermaLink="true">https://morroa.com/blog/markdown-guide</guid>
      <pubDate>Thu, 10 Sep 2026 00:00:00 GMT</pubDate>
      <description>掌握 Markdown 常用语法，写出结构清晰、阅读体验良好的文章。</description>
      <content:encoded><![CDATA[
Markdown 的初衷，是让你专注于内容，而不是排版。下面这份指南覆盖了博客中最常用的语法。

## 标题与段落

使用 `#` 表示标题层级。正文段落之间保留一个空行。

```md
## 二级标题

这是一个普通段落。

### 三级标题

这是另一个段落。
```

## 列表

无序列表适合罗列要点，有序列表适合描述步骤。

- 第一项
- 第二项
  - 嵌套项
- 第三项

1. 第一步
2. 第二步
3. 第三步

## 任务列表

- [x] 完成初稿
- [x] 补充代码示例
- [ ] 发布文章

## 代码块

指定语言可以获得语法高亮：

```ts
export function hello(name: string) {
  return `Hello, ${name}!`;
}
```

行内代码使用反引号，例如 `process.env.NODE_ENV`。

## 表格

| 功能 | 是否支持 |
| --- | --- |
| 表格 | 是 |
| 代码高亮 | 是 |
| 任务列表 | 是 |

## 引用与链接

> 好的工具应该让创作更简单，而不是增加负担。

链接写作 `[文字](https://example.com)`，图片写作 `![描述](图片地址)`。

## 分隔线

使用三个或更多短横线可以创建分隔线：

---

现在，你已经可以开始写作了。
]]></content:encoded>
    </item>
    <item>
      <title>把 Next.js 博客部署到 GitHub Pages 和 Vercel</title>
      <link>https://morroa.com/blog/deploy-to-github-pages-and-vercel</link>
      <guid isPermaLink="true">https://morroa.com/blog/deploy-to-github-pages-and-vercel</guid>
      <pubDate>Sun, 06 Sep 2026 00:00:00 GMT</pubDate>
      <description>一份面向静态博客的部署清单：静态导出、环境变量、自定义域名与自动化发布。</description>
      <content:encoded><![CDATA[
这个博客使用 Next.js 的静态导出能力，因此可以同时部署到 GitHub Pages 和 Vercel，而不需要运行 Node.js 服务。

## 为什么选择静态导出

静态站点没有服务器状态，访问快、维护成本低，也更容易做内容分发。

在 `next.config.ts` 中开启：

```ts
const nextConfig = {
  output: "export",
  trailingSlash: true,
  images: {
    unoptimized: true,
  },
};
```

## 部署到 Vercel

Vercel 会自动识别 Next.js 项目：

1. 将仓库导入 Vercel
2. 框架预设选择 Next.js
3. 执行 `pnpm run build`
4. 输出目录保持默认即可

如果使用了项目子路径，请设置 `NEXT_PUBLIC_BASE_PATH`。

## 部署到 GitHub Pages

GitHub Pages 需要先构建出 `out` 目录，再由 Actions 发布。

这个项目已经提供了 `.github/workflows/deploy.yml`：

```yaml
steps:
  - uses: actions/checkout@v4
  - uses: pnpm/action-setup@v4
  - uses: actions/setup-node@v4
    with:
      node-version: 22
      cache: pnpm
  - run: pnpm install --frozen-lockfile
  - run: pnpm run build
  - uses: actions/upload-pages-artifact@v3
    with:
      path: out
  - uses: actions/deploy-pages@v4
```

## 自定义域名

如果你使用自己的域名，例如 `morroa.com`：

- 在域名服务商添加 CNAME 或 A 记录
- 在 GitHub Pages 设置中填写域名
- 将 `NEXT_PUBLIC_SITE_URL` 设置为 `https://你的域名`

## 验证发布结果

构建完成后，检查这几个文件：

- `sitemap.xml`
- `rss.xml`
- `search-index.json`
- 所有文章的静态 HTML 页面

如果内容正常，你的博客已经可以对外发布了。
]]></content:encoded>
    </item>
    <item>
      <title>用 Tailwind Typography 提升文章可读性</title>
      <link>https://morroa.com/blog/tailwind-typography</link>
      <guid isPermaLink="true">https://morroa.com/blog/tailwind-typography</guid>
      <pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate>
      <description>借助 prose 排版插件，让 Markdown 渲染出的长文拥有更好的视觉节奏。</description>
      <content:encoded><![CDATA[
长文章最怕阅读疲劳。字号、行高、段落间距、标题节奏，都会影响读者的阅读体验。

## 使用 Typography 插件

在 Tailwind CSS v4 中，只需在全局样式中加入：

```css
@import "tailwindcss";
@plugin "@tailwindcss/typography";
```

然后在 Markdown 容器上使用 `prose` 类：

```tsx
<div className="prose prose-zinc dark:prose-invert">
  <MarkdownRenderer content={content} />
</div>
```

## 调整细节

默认排版已经不错，但博客还可以进一步定制：

```css
.prose :where(a) {
  word-break: break-word;
}

.prose :where(code):not(:where(pre code)) {
  border-radius: 0.4rem;
}
```

## 保持克制的设计

好的排版往往不是“更显眼”，而是让内容自然流动。

- 控制每行字符数，避免过宽
- 增加段落之间的呼吸感
- 让代码块拥有稳定、独立的视觉区域
- 深色模式下保持足够的对比度

写完内容后再回来审视一次排版，通常会有新的发现。
]]></content:encoded>
    </item>
  </channel>
</rss>