极简静态博客系统,无框架依赖,数据驱动。
- 无框架 - 纯 Node.js 构建,Vanilla JS 渲染
- 数据驱动 - 数据层与渲染层分离,结构清晰
- 多语言 - 文件名约定支持多语言内容
- 密码保护 - 构建时加密,客户端解密
- 全文搜索 - Pagefind 静态搜索,支持中文
- 可配置 - 颜色、导航等从配置文件读取
npm install # 安装依赖
npm run build # 完整构建(数据 + 渲染 + 搜索)
npm run dev # 开发模式(监听变化自动重建)Markdown → 数据层 → JSON → 渲染层 → HTML
↓
Pagefind 索引
-
数据层 (
scripts/data/)- 加载 config.yaml 和 Markdown 文章
- 渲染 Markdown(marked + highlight.js)
- 生成分页、哈希、加密内容
- 输出 JSON 数据接口
-
渲染层 (
scripts/build.js+src/)- 读取 JSON,渲染 HTML
- 标准 CSS 样式
- 客户端 JS(分页、搜索、解密、SPA 路由)
-
搜索 - Pagefind 生成静态索引,纯前端搜索
nib/
├── content/ # Markdown 文章 + config.yaml
├── data/ # 生成的 JSON(gitignore)
├── dist/ # 构建输出(gitignore)
├── scripts/
│ ├── data/ # 数据层(加载、处理、生成)
│ ├── build.js # 渲染层构建脚本
│ └── cli.js # CLI 入口
├── src/
│ ├── templates/ # HTML 模板
│ ├── style/ # 样式
│ └── script/ # 客户端 JS 模块
└── package.json
---
title: 文章标题
date: 2024-01-01
summary: 文章摘要(可选)
password: 可选密码
---
正文内容...多语言通过文件名后缀区分:index.md(默认)、index_en.md(英文)
编辑 content/config.yaml:
site:
title:
zh_CN: "我的博客"
zh_TW: "我的部落格"
en: "My Blog"
subtitle:
zh_CN: "记录技术与生活"
zh_TW: "記錄技術與生活"
en: "Notes on tech and life"
description:
zh_CN: "博客描述"
zh_TW: "部落格描述"
en: "Blog description"
language: "zh_CN"
build:
output_dir: "dist"
enable_search: true
posts_per_page: 10
theme:
primary_color: "#2563eb"
nav:
- label:
zh_CN: "首页"
zh_TW: "首頁"
en: "Home"
url: "/"
- label:
zh_CN: "关于"
zh_TW: "關於"
en: "About"
url: "/about/"- 数据处理逻辑:
scripts/data/ - 渲染逻辑:
scripts/build.js - 样式:
src/style/ - 模板:
src/templates/ - 客户端交互:
src/script/
MIT