5.0 KiB
5.0 KiB
name, description, tags
| name | description | tags | |||||
|---|---|---|---|---|---|---|---|
| bun-solid-elysia-stack | High-performance SSR stack using Bun, SolidJS, Elysia, and Shadcn-solid |
|
🚀 Bun + SolidJS + ElysiaJS + Shadcn 技术栈规范
🛡️ 核心架构与约束 (Architecture & Constraints)
1. 运行时与构建 (Bun.js)
- Runtime:强制使用
Bun.serve()作为 HTTP 服务器。 - Build: 使用
Bun.build()及其插件系统。 - Testing: 必须使用
bun:test替代 Jest/Vitest。 - Database: 强制使用 TypeORM + SQLite。必须使用 Repository 模式进行数据访问,禁止在 Controller 中直接编写 SQL。
- Package Manager: 必须使用
bun install / add / run。严禁使用npm或yarn。
2. 前端框架 (SolidJS & Solid Start)
- Reactivity:
- 严禁解构 Props (会导致响应式丢失)。必须使用
props.value或splitProps。 - 严禁使用
mcp_chrome-devtools调试时依赖 React DevTools 思维。Solid 是细粒度更新,无 VDOM diff。 - 控制流: 必须使用
<Show>,<For>,<Switch>等内置组件,禁止使用array.map()或三元运算符直接渲染列表/条件。
- 严禁解构 Props (会导致响应式丢失)。必须使用
- SSR/Hydration:
- 服务端数据预取必须在
routeData或createServerData$中完成。 - 禁止在
onMount中执行影响首屏内容的操作(会导致水合不匹配)。
- 服务端数据预取必须在
3. 后端服务 (ElysiaJS)
- Type Safety: 必须使用
t.Object/t.String等 Elysia 类型系统定义 DTO。 - Validation:所有 API 必须有 schema 验证。
- Performance: 路由注册应当利用 Elysia 的 AOT 编译特性,避免动态路由过度嵌套。
4. UI 组件库 (Shadcn-solid + Tailwind)
- Styling:
- 禁止书写
style属性或 CSS 文件。必须使用 Tailwind Utility Classes。 - 必须使用
cn()(clsx + tailwind-merge) 处理动态类名。
- 禁止书写
- Components:
- 优先复用 Shadcn-solid 组件。
- 自定义组件必须支持
class和classList属性透传。
- Dark Mode: 必须通过 CSS 变量和 Tailwind
dark:前缀适配深色模式。
5. 移动端适配与国际化 (Mobile & i18n)
- Responsive Design:
- 必须采用 Mobile-First 策略:默认样式为移动端,使用
mm:,lg:等断点覆盖 PC 端样式。 - 严禁使用固定像素宽度 (px) 定义主要容器,必须使用百分比、
rem或 Tailwind 的container/w-full。 - 交互适配:Touch事件与Hover状态必须兼容(使用
@media (hover: hover)处理仅 PC 显示的交互)。
- 必须采用 Mobile-First 策略:默认样式为移动端,使用
- Internationalization (i18n):
- 必须集成
@solid-primitives/i18n或 Solid Start 官方推荐的 i18n 方案。 - 严禁在 JSX 中硬编码文本。所有文案必须提取到
dictionaries或locales资源文件中。 - SSR支持: 服务端必须解析请求头
Accept-Language或 URL 前缀,在 SSR 阶段注入当前语言字典,杜绝客户端水合时的内容闪烁。
- 必须集成
🔍 代码审计要点 (@code-spec)
当 @code-spec 执行审计时,必须检查以下条目:
- 响应式丢失检查:
- 检查组件 Props 是否被解构? (e.g.
const { name } = props-> ❌)
- 检查组件 Props 是否被解构? (e.g.
- 控制流优化:
- 检查是否使用了
<For>而不是.map()? (Solid 的<For>对 keyed items 做了优化)
- 检查是否使用了
- 类型安全:
- Elysia 路由是否有
body,query,params的t.*定义?
- Elysia 路由是否有
- Bun 兼容性:
- 是否引用了 Node.js 特有且 Bun 未实现的 API? (需查阅 Bun 兼容性表)
- 样式规范:
- 是否存在硬编码颜色值? (应使用 CSS 变量如
bg-backgroundtext-primary)
- 是否存在硬编码颜色值? (应使用 CSS 变量如
- 国际化规范:
- 检查组件中是否存在硬编码的中文/英文字符串? (❌
<span>登录</span>-> ✅<span>{t('login')}</span>)
- 检查组件中是否存在硬编码的中文/英文字符串? (❌
- 响应式检查:
- 检查是否通过
md:,lg:等断点处理了布局变化? 是否存在大块固定px宽度的容器?
- 检查是否通过
- ORM 规范:
- 是否正确使用了 TypeORM 的
@Entity定义模型? - 是否通过 Repository 进行数据操作? (严禁裸写 SQL)
- 是否正确使用了 TypeORM 的
🧪 测试与验收标准 (@qa-tester)
当 @qa-tester 执行测试时,必须验证以下指标:
1. 性能指标 (Performance)
- SSR 渲染耗时: < 50ms (利用 Bun 高性能 RSC 渲染)
- 首屏加载 (LCP): < 1.0s
- 水合错误 (Hydration): 控制台 0 Error/Warning
2. 功能测试
- 路由跳转: 必须是 SPA 模式(无全页刷新)。
- 表单交互: 提交后必须有 Loading 状态,支持 Enter 提交。
3. 兼容性
- No-JS 支持: 核心内容在禁用 JavaScript 时必须可见 (SSR 直出)。
- 浏览器: Chrome, Safari, Firefox 最新版。
4. 多端与多语言测试
- Viewport: 必须覆盖 iPhone SE (375px), iPad Mini (768px), Desktop (1280px+)。
- Touch: 移动端下按钮点击区域必须 >= 44x44px。
- i18n:
- 切换语言必须即时生效(或路由跳转)。
- 刷新页面后,当前语言状态必须保持。
- 检查是否存在未翻译的原始 Key 显示在界面上。