加入 Lyt.js:从第一行代码到核心贡献者
Lyt.js -- 一个零依赖、101,000+ 行纯 TypeScript 实现的轻量级前端框架
本文将手把手带你了解 Lyt.js 的开发流程、代码规范和协作方式,让你从零开始,快速融入团队。
为什么参与 Lyt.js?
在 Vue、React、Angular 三足鼎立的时代,Lyt.js 走了一条不同的路:
- 零运行时依赖 -- 所有功能纯原生实现,不依赖任何第三方包
- Proxy + Signal 双响应式 -- 同时支持 Vue 风格和 Solid.js 风格的响应式
- 24 个精心设计的子包 -- 从编译器到 AI 集成,架构清晰,模块化程度高
- 101,113 行 TypeScript -- 代码质量高,测试覆盖 4,488 个用例
- 活跃开发中 -- v4.2.0 刚刚发布,AI 集成、Vue 3 兼容层等新特性不断涌现
这是一个早期加入、深度参与、塑造方向的绝佳机会。
一、环境准备:5 分钟上手
1.1 前置要求
| 工具 | 版本要求 | 说明 |
|---|---|---|
| Node.js | >= 18.0.0 | 推荐 LTS 版本 |
| Git | 最新版 | 用于代码管理 |
| 编辑器 | VSCode 推荐 | 安装 Lyt.js 官方扩展可获得语法高亮和补全 |
1.2 Fork & Clone
bash
# 1. 在 Gitee 或 GitHub 上 Fork 仓库
# 2. Clone 你的 Fork
git clone https://gitee.com/你的用户名/lytjs.git
cd lytjs
# 3. 添加上游仓库(方便同步最新代码)
git remote add upstream https://gitee.com/lytjs/lytjs.git
# 4. 安装依赖
npm install
# 5. 构建项目
npm run build
# 6. 运行测试(确认环境正常)
npm run test
看到测试全部通过?恭喜你,环境已经就绪!
1.3 项目结构一览
不用一开始就了解所有细节,先建立整体认知:
bash
lytjs/
├── packages/ # 24 个子包(核心工作区域)
│ ├── core/ # 核心入口(createApp, h)
│ ├── reactivity/ # 响应式系统(Proxy + Signal)
│ ├── compiler/ # 模板编译器
│ ├── renderer/ # 渲染器(DOM/SSR/Vapor)
│ ├── component/ # 组件系统
│ ├── vdom/ # 虚拟 DOM
│ ├── common/ # 公共工具
│ ├── router/ # 路由
│ ├── store/ # 状态管理
│ ├── components/ # UI 组件库(38+ 组件)
│ ├── cli/ # 命令行工具
│ ├── ai/ # AI 辅助开发 ⭐ v4.2.0 新增
│ ├── compat/ # Vue 3 兼容层 ⭐ v4.2.0 新增
│ └── ...
├── docs/ # VitePress 文档站
├── tests/ # 测试入口
├── benchmarks/ # 性能基准测试
├── scripts/ # 构建/发布/版本管理脚本
└── .trae/ # AI IDE 集成配置
二、开发流程:从想法到合并
2.1 分支策略
bash
develop(主开发分支)
└── feat/your-feature(你的功能分支)
└── fix/bug-description(你的修复分支)
└── docs/your-docs(你的文档分支)
规则 :永远不要直接在
develop分支上开发。所有改动都通过功能分支提交 PR。
2.2 标准开发流程
bash
# Step 1: 同步最新代码
git checkout develop
git pull upstream develop
# Step 2: 创建功能分支(命名规范很重要!)
git checkout -b feat/add-transition-component
# Step 3: 开发你的功能
# ... 编写代码 ...
# Step 4: 本地验证(每次提交前必做!)
npm run build # 构建成功?
npm run test # 测试通过?
npm run lint # 代码规范?
# Step 5: 提交代码(遵循 Conventional Commits)
git add .
git commit -m "feat(components): 添加 Transition 过渡组件"
# Step 6: 推送到你的 Fork
git push origin feat/add-transition-component
# Step 7: 创建 Pull Request
# 在 Gitee/GitHub 上操作,等待代码审查
2.3 提交信息规范(Conventional Commits)
提交信息不是随便写的,它会被自动用于生成 CHANGELOG:
| 前缀 | 用途 | 示例 |
|---|---|---|
feat: |
新功能 | feat(reactivity): 添加 shallowRef 支持 |
fix: |
Bug 修复 | fix(renderer): 修复 Vapor Mode 内存泄漏 |
docs: |
文档更新 | docs(guide): 更新快速开始教程 |
style: |
代码格式 | style: 统一缩进为 2 空格 |
refactor: |
重构 | refactor(vdom): 优化 diff 算法性能 |
perf: |
性能优化 | perf(reactivity): Signal 批量更新优化 |
test: |
测试 | test(component): 补充 Suspense 测试用例 |
chore: |
工程/工具 | chore: 更新 esbuild 到 0.28 |
格式 :<type>(<scope>): <subject>
小技巧:scope 填包名(如 reactivity、compiler、renderer),方便快速定位改动范围。
三、代码规范:写出团队级代码
3.1 TypeScript 严格模式
Lyt.js 全量使用 TypeScript 严格模式开发:
json
{
"compilerOptions": {
"strict": true,
"target": "ES2018",
"module": "ESNext",
"moduleResolution": "bundler"
}
}
实践建议:
- 所有公共 API 必须有类型定义
- 避免使用
any,用unknown替代 - 使用 JSDoc 注释说明复杂逻辑
3.2 代码风格
项目使用 ESLint 进行代码检查:
bash
# 检查代码规范
npm run lint
# 自动修复
npm run lint:fix
关键规则:
- 缩进:2 空格
- 引号:单引号
- 分号:必须
- 行尾:无分号(按 ESLint 配置为准)
- 最大行宽:100 字符
3.3 编码注意事项(非常重要!)
这是从实际开发中总结的血泪经验,请务必遵守:
- 所有文件使用 UTF-8 编码,不要使用 GBK、GB2312 等编码
- 不要添加 BOM(Byte Order Mark),BOM 会导致各种奇怪的问题
- 中文内容使用全角标点 :
,。!?:;而非, . ! ? : ; - 提交前检查编码:
bash
npm run docs:check-encoding
- 编辑器推荐配置 (VSCode
settings.json):
json
{
"files.encoding": "utf8",
"files.insertFinalNewline": true,
"files.trimTrailingWhitespace": true
}
3.4 测试规范
每个功能都必须有对应的测试:
bash
# 运行所有测试
npm run test
# 运行测试覆盖率报告
npm run test:coverage
测试文件命名 :*.test.ts 或 *.spec.ts
测试风格(describe/it/expect):
typescript
import { describe, it, expect } from '@lytjs/test-utils'
describe('signal', () => {
it('应该正确存储和读取初始值', () => {
const count = signal(0)
expect(count()).toBe(0)
})
it('应该在值变化时通知订阅者', () => {
const count = signal(0)
let received = 0
effect(() => { received = count() })
count.set(5)
expect(received).toBe(5)
})
})
四、文档协作:代码和文档同步更新
4.1 文档类型和位置
| 文档类型 | 位置 | 什么时候更新 |
|---|---|---|
| 用户指南 | docs/guide/ |
新功能、用法变更 |
| API 参考 | docs/api/ |
API 接口变更 |
| 开发者文档 | docs/developer/ |
架构变更 |
| CHANGELOG | CHANGELOG.md |
每次发布 |
| AI 文档 | llms.txt |
API 变更 |
| 包 README | packages/*/README.md |
包功能变更 |
4.2 CHANGELOG 管理
v4.2.0 引入了自动化 CHANGELOG 工具:
bash
# 添加一条变更记录
npm run changelog:add
# 选择类型:feat / fix / docs / perf / test / chore ...
# 输入描述:添加 xxx 功能
# 预览当前所有未发布的变更
npm run changelog:preview
# 发布时生成版本段落
npm run changelog:release 4.2.1
4.3 AI 文档同步
如果你修改了公共 API,记得同步更新 AI 相关文档:
llms.txt-- 精简版,供 AI 助手快速理解项目llms-full.txt-- 完整版,含类型签名和示例.trae/prompts/-- AI 代码生成的提示词模板
五、任务完成检验清单
每次提交 PR 前,逐项确认(复制到你的 PR 描述中):
- 构建通过 :
npm run build无错误 - 测试通过 :
npm run test全部绿 - Lint 通过 :
npm run lint无新增警告 - 文档已更新:相关指南/API 文档/CHANGELOG 已同步
- 编码正确 :
npm run docs:check-encoding无问题 - 无临时文件 :
npm run clean:temp已清理 - 提交信息规范:遵循 Conventional Commits
- 无合并冲突:已 rebase 最新 develop 分支
六、如何找到适合你的任务?
6.1 从 Issue 开始
仓库提供了三种 Issue 模板,帮助你快速找到合适的任务:
| 标签 | 难度 | 适合谁 |
|---|---|---|
good first issue |
入门 | 第一次贡献的新人 |
help wanted |
中等 | 有一定经验的开发者 |
enhancement |
进阶 | 熟悉框架架构的贡献者 |
6.2 推荐的入门任务
如果你是第一次参与,建议从以下方向入手:
文档类(最简单的起点):
- 补充某个包的 README.md
- 翻译文档为英文
- 添加代码示例
- 改进 API 文档
测试类(了解代码的好方式):
- 为现有功能补充测试用例
- 提升测试覆盖率
- 添加边界条件测试
组件类(直观的成果):
- 为 UI 组件库添加新组件
- 改进现有组件的样式
- 添加组件的单元测试
工具类(工程化贡献):
- 改进 CLI 工具
- 优化构建脚本
- 增强 AI 代码生成能力
6.3 认领任务流程
markdown
1. 浏览 Issues,找到感兴趣的任务
2. 评论 "我想认领这个任务"(避免重复工作)
3. 等待维护者确认(通常 24 小时内)
4. 按照本文档的开发流程开始工作
5. 提交 PR,附上详细的改动说明
6. 响应代码审查意见,迭代改进
7. 合并!🎉
七、包间依赖关系:改代码前必看
Lyt.js 的 24 个包不是孤立的,它们之间有清晰的依赖层次:
scss
┌─────────────────────────────────────────┐
│ 应用层 (Application) │
│ core / router / store / components / │
│ cli / ai / compat / lytx / devtools │
├─────────────────────────────────────────┤
│ 核心引擎层 (Engine) │
│ reactivity / compiler / vdom / │
│ component / common │
├─────────────────────────────────────────┤
│ 平台适配层 (Platform) │
│ renderer (DOM / SSR / Vapor) │
└─────────────────────────────────────────┘
修改原则:
- 修改核心引擎层时,务必运行全量测试,因为上层包都依赖它
- 修改应用层时,只需测试该包及其直接依赖
- 添加新包时,明确它属于哪一层,遵循对应的依赖规则
- 所有包的运行时依赖为 0,不要引入新的第三方依赖
八、版本发布流程(维护者参考)
如果你成为了核心维护者,版本发布流程如下:
bash
# 1. 确认 develop 分支所有测试通过
npm run test
# 2. 更新版本号(24 个包统一更新)
npm run version:bump:patch # 4.2.0 → 4.2.1
npm run version:bump:minor # 4.2.0 → 4.3.0
npm run version:bump:major # 4.2.0 → 5.0.0
# 3. 生成 CHANGELOG
npm run changelog:release 4.2.1
# 4. 构建
npm run build
# 5. 发布前预检
npm run test && npm run lint
# 6. 发布(先 dry-run 确认)
npm run publish:dry-run
npm run publish:all
# 7. 推送标签
git push origin --tags
九、沟通与协作
9.1在哪里讨论
| 渠道 | 用途 |
|---|---|
| Gitee Issues | Bug 报告、功能建议、问题讨论 |
| GitHub Issues | 海外开发者反馈 |
| Pull Request | 代码审查和合并 |
9.2 PR 描述模板
提交 PR 时,请使用以下模板:
markdown
## 改动类型
- [ ] feat(新功能)
- [ ] fix(Bug 修复)
- [ ] docs(文档)
- [ ] refactor(重构)
- [ ] perf(性能)
- [ ] test(测试)
## 改动说明
(简要描述你做了什么)
## 关联 Issue
(如有,填写 Fixes #xxx 或 Closes #xxx)
## 测试情况
- [ ] 单元测试已添加/更新
- [ ] 所有测试通过
- [ ] Lint 检查通过
## 自查清单
- [ ] 文档已同步更新
- [ ] CHANGELOG 已添加条目
- [ ] 编码检查通过
- [ ] 无临时文件残留
9.3 代码审查原则
- 保持友善和专业:提出建议时说明原因,而非直接否定
- 小步提交:每个 PR 专注于一个改动,方便审查
- 及时响应:收到审查意见后 48 小时内回复
- 测试先行:新功能必须有测试,Bug 修复必须有回归测试
十、常见问题
Q: 我不是 TypeScript 高手,能参与吗?
当然可以!Lyt.js 的代码结构清晰,注释完善。你可以从文档、测试、组件等方向入手,在实践中提升 TypeScript 能力。而且我们有 4,488 个测试用例作为安全网,不用担心改坏东西。
Q: 改坏了代码怎么办?
Git 是你的安全网。随时可以 git stash 或 git reset。而且所有改动都需要通过 PR 审查和 CI 测试,不会直接影响主分支。
Q: 提交了 PR 一直没回复怎么办?
可以在 PR 下友善地 @ 维护者提醒。通常维护者会在 1-3 个工作日内回复。
Q: 想做大功能(比如实现 MiniApp 渲染器),怎么开始?
先在 Issue 中描述你的方案,和团队讨论确认后再动手。大功能建议分阶段实现,每个阶段一个 PR。
Q: 如何成为核心维护者?
持续贡献高质量代码、积极参与代码审查、帮助解答社区问题。当维护者认可你的贡献后,会邀请你加入核心团队。
附录:常用命令速查表
bash
# === 日常开发 ===
npm run build # 构建所有包
npm run test # 运行测试
npm run lint # 代码检查
npm run lint:fix # 自动修复
# === 测试 ===
npm run test:coverage # 测试覆盖率
npm run benchmark:all # 所有基准测试
# === 版本管理 ===
npm run version:check # 查看当前版本
npm run version:bump:patch # 补丁版本 +1
npm run version:bump:minor # 次版本 +1
# === CHANGELOG ===
npm run changelog:add # 添加变更条目
npm run changelog:preview # 预览变更
npm run changelog:release # 发布版本
# === 文档 ===
npm run docs:check-encoding # 检查编码
# === 清理 ===
npm run clean # 清理构建产物
npm run clean:temp # 清理临时文件
写在最后
Lyt.js 正处于从"个人项目"向"社区项目"转变的关键阶段。v4.2.0 已经完善了 AI 集成、Vue 3 兼容层和社区基础设施,接下来的发展需要更多人的参与和推动。
无论你是想:
- 学习框架设计 -- 101,000 行 TypeScript 是绝佳的学习素材
- 积累开源经验 -- 从文档到核心引擎,有各种难度的任务
- 打造影响力 -- 早期贡献者将在社区中拥有更大的话语权
- 纯粹出于兴趣 -- 零依赖的纯净架构本身就值得探索
Lyt.js 都欢迎你的加入。
GitHub : github.com/idcu/lytjs | Gitee : gitee.com/lytjs/lytjs
每一行代码、每一个文档、每一次 Issue 讨论,都是在为 Lyt.js 添砖加瓦。
期待你的第一个 PR! 🚀