<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>NeteasyMU Blog</title><description>代码、设计与独立开发的笔记</description><link>https://example.com/</link><language>zh_CN</language><item><title>你好，Astro</title><link>https://example.com/posts/hello-astro/</link><guid isPermaLink="true">https://example.com/posts/hello-astro/</guid><description>为什么这个博客选择 Astro，以及它如何把 Markdown 变成轻快的静态页面。</description><pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;欢迎来到 &lt;strong&gt;NeteasyMU Blog&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;这是第一篇文章，也是一次简单的自我介绍：这个站点用什么搭建，以及为什么。&lt;/p&gt;
&lt;h2&gt;为什么是 Astro&lt;/h2&gt;
&lt;p&gt;我一直想要一个足够简单的写作环境：打开编辑器，写 Markdown，提交，然后结束。不需要数据库，不需要后台，也不需要为了显示一篇文章而加载一整套前端框架。&lt;/p&gt;
&lt;p&gt;Astro 刚好符合这个要求。它把内容放在构建时处理，最终输出的是完整的 HTML。浏览器拿到页面就能阅读，JavaScript 只在真正需要交互时才出现。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;好的工具应该让你忘记工具本身，把注意力还给内容。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;它做对了什么&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;内容优先。&lt;/strong&gt; 文章就是仓库里的 Markdown 文件，版本、备份和迁移都变得很自然。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;默认零 JavaScript。&lt;/strong&gt; 对博客来说，这通常意味着更快的第一屏和更少的意外。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;没有锁定。&lt;/strong&gt; 构建产物是静态文件，可以部署到任何地方，也可以随时搬走。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;这个博客的结构&lt;/h2&gt;
&lt;p&gt;这个站点使用 &lt;a href=&quot;https://github.com/LyraVoid/Shirone&quot;&gt;Shirone&lt;/a&gt; 主题，在 Astro 7 之上加入了 Svelte 5 与 Material 3 Expressive 设计系统：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;src/
├── content/posts/   # 文章
├── config/          # 主题配置
├── layouts/         # 页面骨架
└── pages/           # 路由
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;每次执行 &lt;code&gt;pnpm build&lt;/code&gt;，Astro 会把 Markdown 渲染成 HTML，并输出到 &lt;code&gt;dist/&lt;/code&gt;。部署时只需要这个目录。&lt;/p&gt;
&lt;h2&gt;接下来&lt;/h2&gt;
&lt;p&gt;我会在这里记录一些正在做的事情：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;前端与设计&lt;/li&gt;
&lt;li&gt;独立开发中的取舍&lt;/li&gt;
&lt;li&gt;偶尔值得记下来的小问题&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你也刚接触 Astro，可以从 &lt;a href=&quot;https://docs.astro.build/&quot;&gt;官方文档&lt;/a&gt; 开始。它大概是我读过的最清楚的框架文档之一。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;谢谢你读到这里。&lt;/em&gt;&lt;/p&gt;
</content:encoded></item><item><title>在这个博客里写 Markdown</title><link>https://example.com/posts/writing-markdown/</link><guid isPermaLink="true">https://example.com/posts/writing-markdown/</guid><description>从新建文件到发布：一篇关于写作流程、Frontmatter 与常用 Markdown 语法的备忘。</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;在 &lt;code&gt;src/content/posts/&lt;/code&gt; 里新建一个 &lt;code&gt;.md&lt;/code&gt; 文件，就拥有了一篇新文章。文件名会成为网址的一部分，例如 &lt;code&gt;hello-astro.md&lt;/code&gt; 对应 &lt;code&gt;/posts/hello-astro/&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;也可以使用主题自带的命令创建文章骨架：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm new-post my-first-post
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Frontmatter&lt;/h2&gt;
&lt;p&gt;每篇文章顶部都需要一段 Frontmatter，用来描述标题、摘要、发布时间和分类：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: &quot;文章标题&quot;
published: 2026-11-02
description: &quot;一句话摘要，会显示在列表和搜索结果里。&quot;
tags: [Astro, 写作]
category: 写作
draft: false
---
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;draft: true&lt;/code&gt; 的文章不会出现在列表里，也不会被生产构建。写完之前可以先把它藏起来。&lt;/p&gt;
&lt;h2&gt;常用语法&lt;/h2&gt;
&lt;h3&gt;强调与链接&lt;/h3&gt;
&lt;p&gt;用 &lt;code&gt;**粗体**&lt;/code&gt; 表示 &lt;strong&gt;粗体&lt;/strong&gt;，用 &lt;code&gt;*斜体*&lt;/code&gt; 表示 &lt;em&gt;斜体&lt;/em&gt;。链接写成 &lt;code&gt;[文字](https://example.com)&lt;/code&gt;。&lt;/p&gt;
&lt;h3&gt;列表&lt;/h3&gt;
&lt;p&gt;无序列表适合并列的内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第一项&lt;/li&gt;
&lt;li&gt;第二项&lt;/li&gt;
&lt;li&gt;第三项&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;有序列表适合步骤：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;新建文件&lt;/li&gt;
&lt;li&gt;写正文&lt;/li&gt;
&lt;li&gt;运行 &lt;code&gt;pnpm build&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;引用&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;引用用来强调一段独立的想法，或者引入别人的话。&lt;/p&gt;
&lt;p&gt;它可以有多行。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;代码&lt;/h3&gt;
&lt;p&gt;行内代码用反引号包起来，例如 &lt;code&gt;pnpm dev&lt;/code&gt;。代码块则可以指定语言，获得语法高亮：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const posts = await getCollection(&quot;posts&quot;);

const sorted = posts.sort(
  (a, b) =&amp;gt; b.data.published.valueOf() - a.data.published.valueOf(),
);
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;表格&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;字段&lt;/th&gt;
&lt;th&gt;类型&lt;/th&gt;
&lt;th&gt;必填&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;published&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;date&lt;/td&gt;
&lt;td&gt;是&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tags&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string[]&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;category&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;否&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;发布&lt;/h2&gt;
&lt;p&gt;保存文件后，开发服务器会自动刷新。确认排版没有问题，再执行构建：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm build
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;构建会检查 Frontmatter 是否符合内容集合的 schema。字段缺失或类型不对时，构建会直接报错，而不是等到线上才发现。&lt;/p&gt;
</content:encoded></item><item><title>把 Astro 站点部署到网上</title><link>https://example.com/posts/deploy-astro/</link><guid isPermaLink="true">https://example.com/posts/deploy-astro/</guid><description>从 pnpm build 到静态托管：一份不依赖特定平台的部署清单。</description><pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Astro 默认输出静态站点。构建完成后，&lt;code&gt;dist/&lt;/code&gt; 里的文件就是整个网站。&lt;/p&gt;
&lt;h2&gt;先构建&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;pnpm build
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个主题的构建会依次完成内容同步、Astro 构建、Pagefind 搜索索引和字体子集校验，所以比普通 Astro 项目稍慢一些。&lt;/p&gt;
&lt;p&gt;如果只想在本地检查构建结果，可以再运行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm preview
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预览服务器会以生产模式提供 &lt;code&gt;dist/&lt;/code&gt; 中的文件，适合在部署前做最后一次检查。&lt;/p&gt;
&lt;h2&gt;部署清单&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;[ ] &lt;code&gt;pnpm build&lt;/code&gt; 没有报错&lt;/li&gt;
&lt;li&gt;[ ] 标题、描述和日期显示正确&lt;/li&gt;
&lt;li&gt;[ ] 站内链接可以正常跳转&lt;/li&gt;
&lt;li&gt;[ ] 404 页面可以访问&lt;/li&gt;
&lt;li&gt;[ ] 图片和字体没有 404&lt;/li&gt;
&lt;li&gt;[ ] 在手机上检查过排版&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;常见托管方式&lt;/h2&gt;
&lt;h3&gt;Netlify、Vercel、Cloudflare Pages&lt;/h3&gt;
&lt;p&gt;这类平台都可以直接连接 Git 仓库，并使用下面的配置：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;配置项&lt;/th&gt;
&lt;th&gt;值&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;构建命令&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pnpm build&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;输出目录&lt;/td&gt;
&lt;td&gt;&lt;code&gt;dist&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Node.js 版本&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;gt;= 26.13.0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;包管理器&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pnpm 11.x&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;每次推送到主分支，平台会自动重新构建并发布。&lt;/p&gt;
&lt;h3&gt;自己的服务器&lt;/h3&gt;
&lt;p&gt;把 &lt;code&gt;dist/&lt;/code&gt; 上传到服务器的网站目录即可。如果使用 Nginx，一个最简单的站点配置大概是这样：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;server {
    listen 80;
    server_name example.com;
    root /var/www/blog/dist;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;记得把 &lt;code&gt;example.com&lt;/code&gt; 和 &lt;code&gt;root&lt;/code&gt; 换成你自己的域名与目录。&lt;/p&gt;
&lt;h2&gt;自定义域名&lt;/h2&gt;
&lt;p&gt;部署完成后，在托管平台里绑定域名，并按照提示配置 DNS。启用 HTTPS 之后，再把正式域名填回 &lt;code&gt;src/config/siteConfig.ts&lt;/code&gt; 的 &lt;code&gt;site&lt;/code&gt; 字段，canonical 链接、RSS 和 sitemap 才能生成正确的绝对地址。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export const siteConfig = withUserConfig(&quot;site&quot;, {
  site: &quot;https://example.com/&quot;,
  // ...
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;就这样。没有服务器要维护，也没有缓存要清理。&lt;/p&gt;
</content:encoded></item></channel></rss>