Skip to content

willvar/nib

Repository files navigation

nib

极简静态博客系统,无框架依赖,数据驱动。

特性

  • 无框架 - 纯 Node.js 构建,Vanilla JS 渲染
  • 数据驱动 - 数据层与渲染层分离,结构清晰
  • 多语言 - 文件名约定支持多语言内容
  • 密码保护 - 构建时加密,客户端解密
  • 全文搜索 - Pagefind 静态搜索,支持中文
  • 可配置 - 颜色、导航等从配置文件读取

快速开始

npm install       # 安装依赖
npm run build     # 完整构建(数据 + 渲染 + 搜索)
npm run dev       # 开发模式(监听变化自动重建)

架构

Markdown → 数据层 → JSON → 渲染层 → HTML
              ↓
         Pagefind 索引

核心模块

  1. 数据层 (scripts/data/)

    • 加载 config.yaml 和 Markdown 文章
    • 渲染 Markdown(marked + highlight.js)
    • 生成分页、哈希、加密内容
    • 输出 JSON 数据接口
  2. 渲染层 (scripts/build.js + src/)

    • 读取 JSON,渲染 HTML
    • 标准 CSS 样式
    • 客户端 JS(分页、搜索、解密、SPA 路由)
  3. 搜索 - 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/

License

MIT

About

又一个 SSG

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors