这是一个由 Astro SSG + JSON + Markdown 组成的静态博客,不需要运行时后端即可维护内容。
src/pages/*.astro:页面入口src/components/*.astro:可复用 UIsrc/layouts/BaseLayout.astro:公共布局src/scripts/client.ts:首页交互脚本src/assets/site.css:站点样式src/assets/tailwindcss.js:Tailwind runtimesrc/assets/chat-module.js:首页 chat 模块src/assets/chat-prompts.js:chat 系统提示词src/data/site-config.json:站点全局配置(导航、首页、精选区块、页脚)src/data/subpage-config.json:各栏目页面配置src/data/articles.json:文章元数据src/data/connect-profile.json:联系方式与个人主页配置src/content/*.md:文章正文public/img/*:图片资源
npm install
npm run dev如果 4321 被占用,Astro 会自动换端口,以终端输出为准。
在 src/content/ 新建一个 .md 文件,例如:
src/content/my-new-post.md
编辑 src/data/articles.json,新增一个对象,核心字段如下:
id:唯一标识,用于文章链接title:文章标题summary:摘要date:日期(建议YYYY-MM-DD)category:分类数组(可同时属于主分类与精选分类)tags:标签数组contentPath:对应的 Markdown 路径
示例:
{
"id": "my-new-post",
"title": "My New Post",
"summary": "A short summary of this post.",
"date": "2026-03-09",
"category": ["projects", "futureLab"],
"featuredOrder": 3,
"tags": ["Demo", "Notes"],
"specialMark": true,
"contentPath": "./content/my-new-post.md"
}常用主分类值:
projectsmedialogscareerlife
当前精选分类值:
futureLabmediaRankideaLogscareerExperiencelifeStream
如果希望文章进入某个精选区域,需要把对应值写进该文章的 category 数组。
编辑 src/data/subpage-config.json:
views.<key>.pageTitle:浏览器标题views.<key>.heading:页面主标题views.<key>.description:栏目描述views.<key>.category:该页筛选使用的分类值views.<key>.sort:排序规则(如dateDesc、featuredOrderAsc、rankAsc)views.<key>.display:展示样式(如grid-3、grid-2、rank)
编辑 src/data/site-config.json:
navigation:顶部导航配置home.hero:首页首屏文案与按钮featuredSections:首页精选区块及其数据来源connect:联系方式卡片footer:页脚文案
featuredSections 中最关键的字段:
viewKey:跳转到哪个子页面视图sourceCategory:从文章中筛选哪个分类sort:排序规则display:展示样式limit:显示条数
id必须全局唯一,否则详情页可能冲突。contentPath必须和实际 Markdown 文件路径一致。category的值必须和配置中的分类值一致,否则该文章不会在目标栏目出现。- 图片请放到
public/img/,并在connect-profile.json中使用/img/...。 - 构建产物在
dist/,部署时直接发布dist/。 - 修改 JSON 后请确保语法合法(逗号、引号、括号完整)。