外观
值得读源码的小而美项目
约 1033 字
值得读源码的小而美项目
上一篇(在新窗口打开) 讲「大项目按专题读」, 这篇反过来:一万行以内、一个周末能读完的精品。 读小车,才能看见整辆车。
一、选项目标准
① star 5k+(质量经过群众检验)
② 代码量 < 1 万行(含测试,不含依赖)
③ 解决一个「真问题」(不是玩具)
④ 有测试、有文档、有提交规范(学工程素养)
⑤ 你**用过**(读过没用过的,是识字不是阅读)二、JavaScript/Node 篇
dayjs:2KB 的时间库
行数:核心约 1500 行
学什么:插件化架构、API 极简设计、
moment 兼容的巧妙处理
读法:src/index.js 入口 → plugin 机制 →
一个具体 plugin(如 relativeTime)moment 4 万行,dayjs 1500 行干同样的事 —— 「小」是一种工程能力,这本书值得逐行读。
mitt:事件总线
行数:约 200 行(全库!)
学什么:一个「完整库」的最小形态 ——
类型、测试、README、CI、发布流程200 行是一个库的「单位」。读完你会重新理解 「开源库需要什么」。
ky:优雅的 HTTP 客户端
行数:约 1000 行
学什么:fetch 封装、重试逻辑、TypeScript 类型设计Sindre Sorhus 的代码是「现代 JS 库」的范本 (ESM、TS、零依赖哲学)。他的所有小库都值得读。
zod:TS 校验库
行数:核心约 3000 行
学什么:类型体操的上限、链式 API 设计、
编译器级类型推导想理解「TS 类型能玩到什么程度」,读它。 (会读到怀疑人生,慎入。)
三、前端框架插件篇
pinia(选读模块)
行数:核心约 2000 行
学什么:响应式状态管理的实现、
Vue composition API 的真实用法配合本站的 Vue 上手(在新窗口打开) 读。
vite 插件示例(生态)
读什么:好插件的「最小实现」 ——
vite 的插件 API 不复杂,读两三个优质插件就会写四、工具链篇
esbuild(Go,选读)
Go 写的打包器,性能神话。读它的「并行架构」部分 (不读全部,Go 项目行数也不少)。
serve / http-server
行数:几百行
学什么:静态服务器的最小实现读完自己写一个,Node HTTP 基础就扎扎实实。
五、本站自己
techjiang/JinghuaSociety-ScriptureLibrary
规模:配置 + 插件 + 80 篇文章
学什么:
- VuePress + Plume 的配置组织(config.ts)
- 自己写的 RSS 插件(plugins/rss.ts,100 行)
- GitHub Actions 部署(.github/workflows/deploy.yml)
- 「一个可维护站点」的全部零件「能读完的工程」是最现实的学习样本 —— 读大项目是朝圣,读本站这样的,是「原来我也能搭一个」。
六、阅读方法论(小车版)
小项目的正确读法(和大项目篇(在新窗口打开) 不同):
- 一次读完:周末两小时,从入口到出口, 别跳读(小车才值得通读);
- 先看测试:测试是这个库的「规格说明书」 —— 比 README 更懂它;
- 画调用图:一张纸画「谁调谁」, 画完你就「拥有」了这个库;
- 动手改:加个 feature 或修个 bug, 提个 PR —— 从读者变作者;
- 对比读:读完 dayjs 再读 moment 的对应模块, 「同一个问题的两种答案」最涨见识。
七、一个周末阅读计划
周六上午:mitt(200 行)+ 它的测试 → 建立「库的形态」
周六下午:dayjs 核心(1500 行)+ 写个 plugin → 插件化架构
周日上午:ky(1000 行) → 封装艺术
周日下午:本站仓库(配置+插件+CI) → 全栈组装一天一个,四个读完,你对「一个库/一个站怎么组织」 的理解会超过八成同行。
小结
小车三辆:mitt(200 行,库的最小形态)、 dayjs(1500 行,小而美的工程)、ky(1000 行,封装的艺术)。 加上本站(一个完整可维护的站点)。 原则:读得完的才有收获,能读完的才是自己的。