贡献指南
evjs 单仓库的内部开发指南。
项目信息
- 名称:evjs,包命名空间
@evjs/* - 仓库:afx-team/evjs
- CLI:
@evjs/cli提供的ev - 代码检查:Biome
- 模块:仅 ESM
设置
git clone https://github.com/afx-team/evjs.git
cd evjs
npm install
命令
npm run build
npm run test
npm run test:e2e
npm run check-types
npm run lint
npx biome check --write
编码规则
- 导入语句放在文件顶部,纯类型使用
import type。 - 使用 Biome 格式化并检查代码。没有明确理由时,避免
any和宽泛的命名空间导入。 - 新应用统一使用文件页面模型:
src/pages/**/page.*、可选的构建期page.config.ts、由目录决定的 URL,以及routing.mode。 - 页面专属组件、Hook 函数、模型、服务、测试和样式放在页面目录中,不需要
_前缀。 - 文件式客户端路由使用
$param、末尾$...splat和(group)目录。API 路由使用src/apis/**/api.*,URL 由目录决定。 - 新示例使用
page.*、page.config.ts与routing.mode;显式application.routes只放在专门的配置路由测试用例中。 - 服务端函数以
"use server";开头,只使用命名函数导出。 - 配置和构建代码从
@evjs/ev导入;应用源码使用@evjs/ev/api、/middleware、/route、/navigation、/query、/server-context、/transport。直接使用运行时的应用从@evjs/client或@evjs/server导入。 - 框架语义放在
@evjs/ev的构建内部模块中,标准化契约放在@evjs/shared/manifest;构建器适配器只消费BuildPlan并返回构建结果。 .ev、dist、.turbo、node_modules与路由类型声明都是生成产物。- 中间件集合字段和参数使用
middlewares。 单个函数类型使用MiddlewareHandler,有序链类型使用MiddlewareChain。 能力、钩子和模块名称使用单数:server.request.middleware、clientDevMiddleware和middleware.*。具体中间件工厂按行为命名, 例如requestLogger()。
常见任务
添加页面路由
- 创建
src/pages/<url-segments>/page.tsx。 - 默认导出页面组件。
- 需要时使用
$param、末尾$...splat或(group)目录。 - 页面专属源码放在同一目录,不需要
_前缀。 - 页面需要静态标题、命名元信息、渲染字段或已安装插件的页面选项时,添加
page.config.ts。页面插件选项需要在运行时使用时,由插件显式生成对应代码。
添加服务端函数
- 在调用方或领域代码旁创建
[name].server.ts,并从应用中导入它。 - 顶部添加
"use server";。 - 命名导出异步函数。
- 通过
@evjs/ev/query调用。
添加 API 路由
- 在
src/apis下创建 URL 对应目录并添加api.ts文件。 - 从该文件导出
GET、POST等大写 HTTP 方法处理器。 - 辅助代码放在同目录的普通非
api.*模块中。 - 在
src/middlewares/middleware.ts中组合有序的全局中间件,默认导出单个函数或非空数组。 中间件类型和requestLogger从@evjs/ev/middleware导入。 - 使用
@evjs/ev/api的withMiddlewares(handler, middlewares)组合各方法的策略, 通过普通模块导入复用共享链。
添加示例
- 在
examples/下添加私有工作区包。 - 使用
routing.mode与page.*路由目录。 - 添加
index.html和所需工作区依赖。 - 只有示例也作为正式用户模板时,才新增或更新 create-app 映射。
- 添加针对性的单元测试和端到端测试。
- 显式路由树用例放在名称清晰的配置路由测试夹具中,不要放进用户模板。
修改页面或路由约定
- 先更新配置解析与语义图标准化逻辑。
- 同时更新中英文
project-structure、file-conventions、配置文档与相关示例。 - 补充语义图、诊断、脚手架与配置路由测试。
- 运行仓库完整校验。
发布新版本
- 使用待发布版本的
vX.Y.Z标签创建 GitHub Release。 - 发布自动化会同步内部包版本并完成发布。
- 不要在本地修改工作区内部的
"*"依赖。