-
-
Notifications
You must be signed in to change notification settings - Fork 1
Development and CI
github-actions[bot] edited this page Jun 17, 2026
·
1 revision
本项目使用 pnpm workspace + catalog 管理多包 monorepo,借助 rslib(@rslib/core)构建,使用 @rstest/core(Vitest 生态)+ happy-dom 运行单元测试,配合 Playwright 做浏览器 E2E,使用 changesets 管理版本与发布。
pnpm install # 安装所有依赖(workspace hoisting)
pnpm build # 构建所有包 (rslib build)
pnpm test # 单元测试(Vitest + happy-dom)
pnpm typecheck # 全量类型检查
pnpm browser-test # Playwright E2E(需先 build)
pnpm test:all # = lint + typecheck + test + browser-test
pnpm demo # 启动文档站点 (rsbuild dev -- docs/rikka-homepage)
pnpm changeset # 创建 changeset 条目
pnpm version-packages # bump 版本 + 生成 changelog
pnpm release # 发布到 npmroot package.json / pnpm-workspace.yaml (catalog: strict)
├─ utils/
│ ├─ rikka-signal/ (peer: signal-polyfill)
│ ├─ rikka-dom/ (depends: rikka-signal)
│ └─ rikka-elements/ (depends: rikka-signal, rikka-dom)
├─ components/
│ └─ rikka-live-playground/
├─ docs/
│ └─ rikka-homepage/
├─ examples/
│ ├─ 2048-game, bookmark-manager, code-editor, drawing-pad
│ ├─ finance-tracker, pomodoro-timer, snake-game, todo-list
└─ scripts/ # 顶层 CI 脚本
├─ ci.mjs
├─ test.mjs
├─ typecheck.mjs
└─ browser-test.mjs
pnpm-workspace.yaml 的 catalog 统一声明所有共享依赖版本,各包只需写 "catalog:" 占位 — 便于统一升级。
catalog:
'@rslib/core': ^0.21.0
'@rstest/core': ^0.10.3
happy-dom: ^20.9.0
signal-polyfill: ^0.2.2
typescript: ^6.0.3
playwright: ^1.60.0
sucrase: ^3.35.0
highlight.js: ^11.11.1
codejar: ^4.3.0
catalogMode: strict每个包的 rslib.config.ts 声明入口与输出格式(ESM-only):
// utils/rikka-signal/rslib.config.ts
import { defineConfig } from "@rslib/core";
export default defineConfig({
lib: [
{ format: "esm", source: { input: ["src/**/*.ts", "!src/**/*.test.ts"] } },
],
});运行:pnpm build(顶层)或每个包中的 pnpm -C utils/rikka-signal build。
每个包提供 rstest.config.ts:
import { defineConfig } from "@rstest/core";
export default defineConfig({
test: { environment: "happy-dom" },
});运行:
pnpm test # 顶层 → 执行全部包
pnpm --filter rikka-dom test # 单包测试文件命名:src/**.test.ts 或 test/**.test.ts。
scripts/browser-test.mjs + Playwright 驱动真实浏览器,验证 DOM 行为与自定义元素。在 CI 中通过 test:all 触发。
scripts/typecheck.mjs 遍历所有包调用 tsc --noEmit:
pnpm typecheck建议在 VS Code 中开启 strict: true,与项目的 tsconfig.json 一致。
GitHub Actions 工作流:
-
.github/workflows/ci.yml— 每次 PR / push 到 main:install → build → typecheck → test → browser-test -
.github/workflows/deploy.yml— 部署文档站点到 GitHub Pages -
.github/workflows/release.yml— Changesets 驱动版本发布到 npm
- 在功能分支提交后执行:
pnpm changeset # 选择受影响的包和升级级别 (major/minor/patch) - 合并 PR 到 main
-
release.yml自动:- 执行
pnpm changeset version更新版本号并生成CHANGELOG.md - 创建版本 PR
- 执行
- 版本 PR 合并后,
release.yml发布到 npm
| 文件 | 职责 |
|---|---|
scripts/ci.mjs |
orchestrator:依次调用 typecheck → test → browser-test |
scripts/test.mjs |
遍历 workspace 包 → rstest 执行单测 |
scripts/typecheck.mjs |
遍历 → tsc --noEmit
|
scripts/browser-test.mjs |
Playwright E2E runner |
scripts/README.md |
脚本说明 |
- 使用
pnpm demo在本地并行查看文档与示例 - 写新功能前:先在对应的
utils/*/test/下加测试(TDD 友好) - 如需全局依赖升级,编辑
pnpm-workspace.yaml的 catalog,然后pnpm install自动同步 - 不要直接更改发布包的
package.jsonversion;使用changeset管理 - 命名约定:
- 公共 API 全在
src/index.tsre-export - 内部工具函数放在
src/*.ts(如signal-utils.ts,utils.ts) - 测试文件命名
*.test.ts
- 公共 API 全在
- 查看 For LLMs and Agents — 如何让 AI 更高效地写 Rikka 代码
Rikka Wiki
- Home
- Getting Started
- Architecture Overview
- Core Packages
- Components
- Examples & Patterns
- Development & CI
- For LLMs and Agents
External links