FORMA

知识库说明

欢迎来到 FORMA 知识库

这里把原先分散在独立文档站里的笔记、技能小册、生活记录与团队实践,统一收进 FORMA 工具台,和代码美化、Playground、图片压缩等工具放在同一张「桌面」上。

本文是整库的阅读入口:说明迁移动机、内容地图、推荐读法、页面怎么用,以及如何继续用 Markdown 写作与维护。若你只想快速上手,先看 三分钟上手,再按兴趣跳进对应分区。

当前库内约有 426 篇 Markdown:技能小册 ~209、生活笔记 ~166、服务笔记 ~28、团队文档 ~22,另含本篇阅读指南。列表页支持分类筛选、关键词搜索与滚动分页;详情页提供目录、上下篇与回到顶部。近期已将 Jenkins / 跨端 / Redis / Git / Docker / Sass / 模块联邦 / 摄影场景等碎片文合并为专题,单篇更完整。

三分钟上手

  1. 打开 /knowledge。左侧点分类,或顶部搜索框输入关键词(如 vuedocker摄影)。
  2. 列表按置顶优先,再按 date 倒序;滚到底部会自动加载下一页(默认每页 20 篇)。
  3. 点进文章后:左侧看分类 / 日期 / 标签与目录;正文区阅读;大屏右侧可看上下篇与 Series;html / css / js / vue / ts / scss / less 代码块可一键「Playground」打开演练场;右下角可回到顶部。
  4. 系统补前端 / 全栈:从 JavaScript 基础工程化概览 进入技能小册。
  5. 部署与私有化:在列表选「服务笔记」,或搜 1paneldockerjenkins
  6. 摄影或小说:从 学习摄影创作 进入,或列表筛选「生活笔记」。
  7. 业务踩坑与组件实践:列表筛选「团队文档」,例如 执行价格弹窗
从列表返回详情再回来时,一般会尽量恢复你离开时的滚动位置;点分类筛选会滚回列表顶部,方便重新扫标题。

为什么从 Rspress 迁移到 FORMA?

早期知识库以 Rspress(偏文档站 / 静态站点)独立部署:结构清晰、适合「纯文档」场景,但也带来一些摩擦。

痛点说明
站点割裂工具在 FORMA,笔记在另一个域名 / 仓库,日常切换成本高
双份基建主题、导航、部署流水线、域名与缓存要维护两套
检索与入口分散「一边查文档一边用工具」时要开多个标签页
扩展不够顺列表分页、站点更新提示、与 Nuxt UI / API / SQLite 打通不自然
内容体量变大小册、生活、服务、团队文档增多后,更需要统一的 Frontmatter、分类与接口约定

因此在 FORMA v1.0.0 起,把原 Rspress 知识库整体迁入本站(详见 更新日志):

  • 内容仍是 Markdown:写作习惯不变,Git 可审阅、可 diff。
  • 渲染交给 Nuxt Content:构建 / 开发时写入 SQLite(better-sqlite3),页面与 /api/knowledge 读同一份数据。
  • 与工具台同站:侧栏即可在「工具」与「知识库」之间切换。
  • 统一信息架构category / tags / pinned / draft 一套约定,列表与接口行为一致。
迁移重点是「入口与基建合并」,不是推倒重写正文。历史文章大多保留原有结构与配图;站内链接已统一为 /knowledge/...(Content 侧路径段为小写)。

迁移后立刻能感知的变化

  • 地址从独立文档站变为 /knowledge/...(完整形式:https://你的域名/knowledge/...)。
  • 列表可按「技能小册 / 生活笔记 / 服务笔记 / 团队文档 / 阅读指南」筛选。
  • 详情页与 FORMA 主题色、浅色 / 深色模式一致。
  • 需要程序读取时,可直接调接口(见 数据与接口),不必再爬静态 HTML。

这里记录了哪些内容?

知识库按用途分成四大内容分区,外加本篇阅读指南。源文件都在 content/knowledge/ 下。

总览

分区目录category大致体量一句话
技能小册booklet/技能小册~209 篇前端到运维的系统化入门笔记
生活笔记life-notes/生活笔记~166 篇摄影、小说与日常观察
服务笔记service-notes/服务笔记~28 篇自部署、运维工具与技术调研
团队文档team-documents/团队文档~22 篇业务组件、性能与踩坑复盘
阅读指南(根目录)阅读指南本篇等怎么读、怎么写、库怎么组织

内容之间的关系

text
阅读指南(本篇)
    │
    ├─ 技能小册 ── 概念与路径(学什么)
    ├─ 服务笔记 ── 落地与踩坑(怎么装、怎么排)
    ├─ 团队文档 ── 业务现场(组件 / 性能 / 兼容)
    └─ 生活笔记 ── 兴趣与表达(摄影 / 小说 / 日常)

技术向文章之间会互相引用(例如服务笔记链到小册里的 NestJS、字体优化等)。站内链接统一为:

text
/knowledge/<分区>/<…路径…>

示例:content/knowledge/booklet/web/Js/basics.md/knowledge/booklet/web/js/basics


1. 技能小册(booklet/

面向「把技术栈串起来」的学习路径,偏结构化笔记:不是替代官方文档,而是帮你建立地图与常用概念。

推荐入口

想学什么建议从这里开始
JavaScript 基础JS · basics
框架(Vue / React / Angular)Vue · basicsReact · basicsAngular · basics
工程化工程化概览
后端与运行时后端入门概览
数据存储SQL 导读
Git / Docker / Nginx运维与协作导读

子目录地图

子目录主题你会看到什么
web/前端基础HTML、CSS(含 Sass/Less)、JavaScript(作用域、原型、事件循环、DOM 等)
frame/前端框架Vue / React / Angular 基础、路由、状态、性能相关笔记
project/工程化Vite、Webpack、ESLint、Prettier、Husky、环境变量等
end/后端与运行时Node.js、Express、NestJS、Bun、Deno、Rust 入门路径
sql/数据存储MySQL、Redis 基础与导读
uphold/运维协作Git、Docker、Nginx

适合:系统补基础、面试前串知识点、或写业务时快速回顾某一块。


2. 生活笔记(life-notes/

偏个人表达与长期兴趣,和技能小册分开,避免「技术文档」与「生活记录」搅在一起。

推荐入口

想看什么入口
摄影入门课学习摄影创作
小说连载列表搜书名,或从各书目录下的 start / 第一章进入(如 novel-01 · start
日常短文列表筛选「生活笔记」,浏览 life-content/ 下文章

子目录地图

子目录主题说明
photo-creation/摄影创作基础(曝光三角、光圈快门 ISO…)、练习课题、七大场景专题(风光/街头/人像等)
life-novel/小说多部连载 / 完结作品章节(虚构叙事,请勿过度代入现实)
life-content/日常内容生活向短文与其它记录

摄影建议顺序:basicspracticescenarios(先懂原理,再敢拍,再会选场景)。


3. 服务笔记(service-notes/

记录真实环境里的部署、排错、选型与调研,偏「做过一遍」的经验,常带截图与命令。

推荐入口

/knowledge 选择分类「服务笔记」,或直接用关键词搜索。常见主题示例:

主题方向示例关键词 / 文件线索
面板与托管1panelbt(宝塔)、dokploy
CI / 构建jenkinspm2deploy-docker
AI / 应用dify
工程调研double-tokenfontmodulescross-platform

子目录地图

子目录主题说明
service/服务与运维1Panel、Jenkins、Dify、Dokploy、PM2、Docker 部署、宝塔等
research/技术调研模块联邦、远程组件、双 Token、字体子集、跨端、Rust/PATH 等
命令与截图可能随版本过时。排障时请以官方文档为准,本文当「思路备忘」与「曾经有效过的路径」。

4. 团队文档(team-documents/

来自真实业务现场的组件设计、性能优化、兼容适配与事故复盘,编号 0122,彼此相对独立,可按标题检索。

怎么读

  1. 列表筛选「团队文档」,扫 title / description
  2. 或打开具体篇目,例如:
  3. 关注文中的技术栈版本与复盘结论;迁移到自己的项目时注意框架与组件库差异。

适合:做后台表格、H5 / 企微内嵌、上传水印、支付中转、列表性能等问题时对照。


怎么阅读?推荐路径

不同目标,建议用不同读法。

A. 访客随便逛逛

  1. 打开 /knowledge,先看置顶(本篇)。
  2. 左侧点一个分类,扫标题与摘要。
  3. 感兴趣再进正文;不必按目录顺序读。

B. 系统补前端 / 全栈

  1. JS · basics → HTML / CSS 同级目录。
  2. frame(Vue / React / Angular)→ 工程化概览
  3. 需要服务端时进 后端入门,数据进 SQL,协作与部署进 uphold
  4. 每个大目录常有 index / basics 导读,优先跟表走。

C. 排生产 / 自托管问题

  1. 分类选「服务笔记」,或搜 1paneljenkinsdockerpm2dify
  2. 对照文中命令与截图;版本以官方为准。
  3. 若涉及前端基建,可交叉阅读技能小册的工程化 / NestJS 等章节。

D. 学摄影或看小说

  1. 摄影:学习摄影创作basicspracticescenarios
  2. 小说:从各书 start / 第一章进入,按章节阅读。
  3. 记住:小说为虚构,请以文内声明为准。

E. 查业务组件与踩坑

  1. 分类选「团队文档」。
  2. 用搜索框输入现象关键词(如 水印键盘vxe-table企微)。
  3. 先读「背景 / 现象」,再读「方案 / 复盘」,最后对照自己的技术栈。

阅读时的小提示

  • 摘要先行:列表里的 description 一般够判断要不要点进去。
  • 用标签扫一眼:详情侧栏的 #tag 反映主题词,便于联想相关文。
  • 相信目录:长文左侧 TOC 比反复滚动更高效。
  • 交叉引用:正文里的站内链接已尽量改为 /knowledge/...;若遇 404,多半是路径大小写或旧链接残留。
  • 批判性阅读:小册与笔记不能保证绝对正确;以官方文档与你的实践为准。

列表页与详情页怎么用?

列表页 /knowledge

能力说明
分类左侧「全部」与各 category;数字为当前搜索条件下的篇数
搜索匹配标题、摘要、分类、标签(带防抖);会重置分页
分页默认每页 20 篇,滚到底自动加载;显示「已加载 / 总数」
排序置顶 → 日期倒序
悬停预取鼠标悬停 / 按下链接时会预热详情接口,减少偶发打开缓慢
回到顶部滚动一段距离后,右下角出现按钮

详情页 /knowledge/...

能力说明
元信息分类、日期、标签
目录由正文 h2h4 生成,可点击跳转
正文MDC 渲染:标题、列表、表格、代码高亮、::callout、图片懒加载等
上下文上一篇 / 下一篇(异步加载,不阻塞正文首屏)
回到顶部同列表页
SEO标题 / 描述 / canonical 会随文章更新

站点结构与 URL 约定

text
content/knowledge/
├── getting-started.md           → /knowledge/getting-started
├── booklet/                     → /knowledge/booklet/...
├── life-notes/                  → /knowledge/life-notes/...
├── service-notes/               → /knowledge/service-notes/...
└── team-documents/              → /knowledge/team-documents/...

规则简述:

  1. 文件路径相对 content/knowledge/,去掉 .md 即路由后缀。
  2. index.md 通常对应去掉 index 的目录路径(以实际生成的 path 为准)。
  3. 路径段小写:即使仓库目录是 NodeJsJs,访问时用 nodejsjs
  4. 文内互链请写绝对路径,例如 /knowledge/booklet/web/js/basics,避免相对路径在迁移后失效。
  5. 旧站形式(如 /booklet/...、裸 /life-notes/...)已废弃,请改带 /knowledge 前缀。

路径对照示例

仓库文件访问 URL
content/knowledge/getting-started.md/knowledge/getting-started
content/knowledge/booklet/web/Js/basics.md/knowledge/booklet/web/js/basics
content/knowledge/team-documents/01.md/knowledge/team-documents/01
content/knowledge/life-notes/photo-creation/index.md/knowledge/life-notes/photo-creation

如何撰写与维护文章?

新建一篇

  1. 在对应分区目录下新建 .md(例如 content/knowledge/service-notes/service/my-note.md)。
  2. 写好 Frontmatter + 正文,保存。
  3. 本地执行 pnpm dev,打开列表或对应 URL 预览;构建时会进入 Content 的 SQLite。

Frontmatter 字段

Schema 定义见仓库根目录 content.config.ts

字段类型说明
titlestring必填。页面主标题,也用于列表与 SEO
descriptionstring摘要;用于列表卡片与 meta description,建议一两句说清「这篇解决什么」
categorystring分类。建议稳定取值见下表
tagsstring标签数组;尽量具体(vuedocker),避免空泛词
datestringYYYY-MM-DD,参与列表排序
pinnedbooleantrue 时置顶(请克制使用)
draftbooleantrue 时不在列表与公开接口中展示

建议的 category 取值

取值用于
技能小册booklet/
生活笔记life-notes/
服务笔记service-notes/
团队文档team-documents/
阅读指南本篇等导读

分类样式(强调色 / 图标)在前端 app/utils/knowledge.ts 中映射;新增分类名若未登记,会走默认样式。

完整示例

md
---
title: 我的笔记
description: 一段简短说明,会出现在列表摘要与搜索结果里。
category: 服务笔记
tags: [docker, ops]
date: 2026-07-22
pinned: false
---

## 背景

正文从这里开始。

::callout{color="success"}
可以用 callout 强调注意点、结论或风险。
::

### 命令示例

```bash
docker compose up -d
```

写作约定(建议)

  • 一篇一个主题;大专题拆多篇,并用导读页或表格串起来。
  • 标题层级连贯:# 文题(可与 title 一致)→ ## 大节 → ### 小节;避免跳级。
  • 代码块标明语言(ts / vue / bash / json 等),便于高亮。
  • html / css / js / vue / ts / scss / less(及 javascript / typescript / sass)代码块会显示 Playground 按钮,可回填到站内演练场;不需要时在 fence meta 加 no-playground。其他语言若也想打开,可加 playground
  • 外链写清来源;站内互链用 /knowledge/...
  • 过时命令或版本在文首或 callout 里标明「以官方为准」。
  • 表格列不宜过多;手机上过宽表格会横向滚动。
  • 图片尽量有说明性 alt;大图注意体积。
  • 小说等虚构内容保留免责声明。

MDC / Callout 速查

正文由 MDC 渲染,配色与 FORMA / Nuxt UI 主题变量对齐。常用 callout:

md
::callout{color="info"}
说明、背景、补充信息。
::

::callout{color="success"}
技巧、推荐做法、正向提示。
::

::callout{color="warning"}
注意版本、安全或易踩坑点。
::

::callout{color="error"}
严重风险、勿直接照抄的危险操作。
::

::callout{color="primary"}
与本站能力相关的强调(迁移说明、产品约定等)。
::

color 可选:info / success / warning / error / primary / secondary(与 app/app.config.ts 中 prose callout 变体一致)。

代码块可带文件名与 meta(Nuxt Content / MDC 约定)。html / css / js / vue / ts / scss / less 默认显示「Playground」;加 no-playground 可关闭:

md
```html [demo.html]
<div class="card">Hello</div>
```

```css no-playground
/* 仅展示、不进演练场 */
.card { padding: 1rem; }
```

可直接试用(点右上角 Playground):

try-me.htmlhtml
<div class="card">
  <p class="eyebrow">FORMA</p>
  <h1>在演练场改我</h1>
</div>

<style>
  body {
    margin: 0;
    min-height: 100vh;
    display: grid;
    place-items: center;
    font-family: system-ui, sans-serif;
    background: #0b0f14;
    color: #e8edf2;
  }
  .card { text-align: center; padding: 2rem; }
  .eyebrow {
    margin: 0;
    font-size: 11px;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: #8b97a5;
  }
  h1 { margin: 0.5rem 0 0; letter-spacing: -0.03em; }
</style>

数据与接口(进阶)

内容在构建 / 开发时由 @nuxt/content 写入 SQLite(依赖 better-sqlite3)。页面与 API 读的是同一份数据。返回体通常带 source: "sqlite"connector: "better-sqlite3",便于确认数据来源。

列表 GET /api/knowledge

查询参数说明
page页码,从 1 开始
pageSize每页条数,默认 20,最大 100
category精确匹配分类名
tag精确匹配单个标签(不区分大小写)
q关键词;匹配标题、摘要、分类、标签
prefix路径前缀过滤,如 /knowledge/booklet

示例:

http
GET /api/knowledge?page=1&pageSize=20&category=技能小册&q=vue

响应要点:itemstotalhasMorefacets.categories(各分类计数)、facets.totalAll(当前筛选下、分类过滤前的总数,供侧栏「全部」使用)。

详情 GET /api/knowledge/<slug...>

默认只返回正文与元信息(更快)。需要上下篇时追加 surround=1

http
GET /api/knowledge/booklet/web/js/basics
GET /api/knowledge/booklet/web/js/basics?surround=1
字段说明
page文章对象(含 bodytitledescriptioncategorytagsdate 等)
surroundsurround=1 时出现;[上一篇, 下一篇],缺省侧为 null

草稿(draft: true)对公开接口表现为 404。

站点地图

公开文章也会进入 /sitemap.xml(需配置 NUXT_PUBLIC_SITE_URL 以得到绝对域名)。/robots.txt 会指向该 sitemap,并禁止抓取 /api/


本地开发与预览

bash
pnpm install
pnpm dev

然后打开:

  • 列表:http://localhost:3000/knowledge
  • 本篇:http://localhost:3000/knowledge/getting-started
  • 接口:http://localhost:3000/api/knowledge?page=1&pageSize=5

生产构建:

bash
pnpm build
pnpm preview
知识库列表页会预渲染;单篇详情在生产侧采用按需 ISR / 缓存策略,避免构建时扫完全部 420+ 路由。改完 Markdown 后,开发模式一般会热更新 Content;若列表未见新文,先确认未设 draft: true,并检查 Frontmatter YAML 是否合法。

常见问题

Q:为什么有的旧链接 404?
A:迁移后统一前缀为 /knowledge/...,且路径段小写。另有一批碎片文已合并(如 jenkins-use-1jenkins-1panelweb-update-1/2web-update,Git/Docker/Sass/Redis/摄影场景等同理)。请用列表搜索标题,或检查是否仍是旧 slug / 大小写不一致(如 Js vs js)。

Q:列表里找不到刚写的文章?
A:确认未设 draft: truepnpm dev 是否在跑;Frontmatter 的 --- 是否成对、YAML 缩进与引号是否合法;category 是否写错导致你筛错分类。

Q:搜索好像搜不到正文里的某一句?
A:当前列表搜索匹配的是标题、摘要、分类与标签,不包含全文正文。重要关键词请写进 descriptiontags

Q:技能小册能当完整教程吗?
A:不能替代系统课程与官方文档。它是入门地图与备忘;请搭配练习与权威资料。

Q:生活笔记里的小说是真事吗?
A:否,虚构叙事。请以各书文内声明为准。

Q:团队文档里的方案能直接拷到我的项目吗?
A:当作思路与踩坑参考。注意文中 Vue / 组件库 / 构建工具版本;直接粘贴前先对照你方技术栈。

Q:还能单独部署 Rspress 站吗?
A:内容已迁入本仓库维护。若需导出,可直接使用 content/knowledge/**/*.md;渲染与路由以 FORMA 为准。

Q:callout 不显示或样式不对?
A:请使用 ::callout{color="info"} 等形式(见上文速查),并保证结尾单独一行的 ::。配色变体以站点 app.config 为准。

Q:如何反馈错误链接或错别字?
A:直接提仓库 Issue / PR,或在团队内反馈路径与期望文案即可。


接下来可以去哪儿?

目标入口
逛全部文章/knowledge
JavaScript / 前端基础JS · basics
工程化工程化概览
后端入门后端入门概览
部署与调研列表筛选「服务笔记」
业务踩坑列表筛选「团队文档」或 01 篇
摄影入门学习摄影创作
站点版本与迁移说明/changelog
回到工具台首页/

如果你在阅读中发现错误链接、过时命令或错别字,欢迎反馈——知识库会持续修正与增补。

相关文章