加入 Lyt.js:从第一行代码到核心贡献者

加入 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 编码注意事项(非常重要!)

这是从实际开发中总结的血泪经验,请务必遵守:

  1. 所有文件使用 UTF-8 编码,不要使用 GBK、GB2312 等编码
  2. 不要添加 BOM(Byte Order Mark),BOM 会导致各种奇怪的问题
  3. 中文内容使用全角标点,。!?:; 而非 , . ! ? : ;
  4. 提交前检查编码
bash 复制代码
npm run docs:check-encoding
  1. 编辑器推荐配置 (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 stashgit 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! 🚀

相关推荐
肥羊zzz1 小时前
Vue2 vs Vue3 中 v-for 的 key 用法对比
前端·vue.js
dsyyyyy11012 小时前
HTML总结
前端·html
前端那点事3 小时前
深度解析:Vue中computed的实现原理(易懂不晦涩)
前端·vue.js
Mike_jia3 小时前
PortNote:可视化端口管理工具,让端口冲突成为历史
前端
前端那点事3 小时前
Vue中深克隆的3种实现方案(附详细注释+测试)
前端·vue.js
存在X3 小时前
claude code自定义模型
前端·claude
Highcharts.js3 小时前
赋能金融 SaaS|如何利用 Highcharts 与 Morningstar 数据构建顶级分析仪表盘
前端·金融·echarts·saas·bi·highcharts
啷咯哩咯啷3 小时前
纯本地运行的私人文档知识库
前端·人工智能·后端
❆VE❆3 小时前
基于 contenteditable 实现变量插入富文本编辑器
前端·javascript·vue.js