logo
0
0
Login

轻量级Markdown博客系统

一个极简、无数据库的博客系统,直接读取Markdown文件,支持代码高亮和响应式布局。

特点

  • 🚀 无数据库设计:直接读取文件系统中的Markdown文件
  • 🎯 极简架构:前后端分离但保持简单,纯原生JS
  • 📝 Markdown支持:完整的Markdown语法支持,包括代码高亮
  • 🎨 响应式设计:适配各种设备屏幕
  • 📱 移动友好:在手机和平板上也有良好体验
  • 🔍 搜索功能:支持标题、内容和标签搜索
  • 🏷️ 标签系统:文章分类和过滤
  • 🚀 一键部署:轻松部署到Vercel或Cloudflare Pages

技术栈

  • 后端:Node.js + Express(单文件服务器)
  • 前端:原生 HTML/CSS/JS(无构建工具)
  • Markdown解析:gray-matter + marked + highlight.js

项目结构

minimal-blog/ ├── posts/ # 存放Markdown文章 │ ├── hello-world.md # 示例文章 │ ├── markdown-guide.md # 示例文章 │ └── deployment.md # 示例文章 ├── public/ # 前端静态文件 │ ├── css/ │ │ └── style.css # 样式文件 │ ├── js/ │ │ ├── app.js # 主页脚本 │ │ └── post.js # 文章页脚本 │ ├── index.html # 主页HTML │ ├── post.html # 文章详情页HTML │ └── _headers # Cloudflare Pages配置 ├── functions/ # Cloudflare Pages函数 │ └── api/ │ └── [...path].js # API处理函数 ├── server.js # Express服务器(开发环境) ├── vercel.json # Vercel配置 └── package.json # 项目依赖

快速开始

1. 安装依赖

npm install

2. 启动开发服务器

npm start

或者使用nodemon(开发环境):

npm run dev

访问 http://localhost:3000 查看博客。

添加文章

1. 创建Markdown文件

posts目录下创建新的.md文件,文件名将作为文章的URL slug。

2. 添加Frontmatter

在文件顶部添加YAML格式的元数据:

--- title: "文章标题" date: "2023-10-15" tags: ["标签1", "标签2"] author: "作者名" excerpt: "文章简介" coverImage: "封面图片URL" --- 这里是文章的Markdown内容...

3. 编写内容

使用标准Markdown语法编写文章内容,支持:

  • 标题(H1-H6)
  • 文本格式(粗体、斜体、删除线)
  • 列表(有序、无序)
  • 引用
  • 代码块(带语法高亮)
  • 表格
  • 链接和图片

部署

部署到Vercel

  1. 将代码推送到GitHub仓库
  2. 在Vercel中导入项目
  3. Vercel会自动检测项目类型并部署

详细步骤请参考:部署指南

部署到Cloudflare Pages

  1. 将代码推送到GitHub仓库
  2. 在Cloudflare Pages中连接仓库
  3. 配置构建设置

详细步骤请参考:部署指南

自定义

修改样式

编辑public/css/style.css文件来自定义博客的外观。

修改功能

编辑以下文件来扩展功能:

  • server.js - 后端API逻辑
  • public/js/app.js - 前端主页功能
  • public/js/post.js - 前端文章页功能

添加页面

  1. public目录下创建新的HTML文件
  2. 添加对应的JavaScript文件(如果需要)
  3. server.js中添加路由(开发环境)

API文档

GET /api/posts

获取所有文章列表。

响应示例:

[ { "slug": "hello-world", "title": "你好,世界!", "date": "2023-10-15", "tags": ["技术", "博客"], "excerpt": "文章简介...", "author": "作者名", "coverImage": "封面图片URL" } ]

GET /api/posts/:slug

获取单篇文章内容。

响应示例:

{ "slug": "hello-world", "title": "你好,世界!", "date": "2023-10-15", "tags": ["技术", "博客"], "excerpt": "文章简介...", "author": "作者名", "coverImage": "封面图片URL", "content": "<p>HTML格式的文章内容...</p>" }

故障排除

文章不显示

  1. 检查文件是否放在正确的posts目录
  2. 确认文件扩展名是.md
  3. 检查frontmatter格式是否正确
  4. 确认日期格式(YYYY-MM-DD)

样式不正确

  1. 检查CSS文件路径是否正确
  2. 确认浏览器没有缓存旧样式

部署问题

  1. 检查依赖是否正确安装
  2. 确认平台配置文件(vercel.json)正确
  3. 查看部署日志获取具体错误

许可证

MIT License - 详见 LICENSE 文件。

贡献

欢迎提交Issue和Pull Request来改进这个项目!

About

cnb_mcp

Language
JavaScript64%
TypeScript21.8%
Rust10.8%
HTML1.5%
Others1.9%