news 2026/9/29 18:24:17

treg前端架构解析:Vue 3 Dashboard 与 Vite 构建完全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
treg前端架构解析:Vue 3 Dashboard 与 Vite 构建完全指南

treg前端架构解析:Vue 3 Dashboard 与 Vite 构建完全指南

【免费下载链接】tregOpenRouter for agent tools. Join community here: https://discord.gg/6mQYYfFMAn项目地址: https://gitcode.com/GitHub_Trending/treg/treg

🎯 treg 是一个"Agent 工具的 OpenRouter"——用一个统一密钥调用 2000+ 种工具(Semrush、Moz、Google Ads、Instagram 等)。它的前端 Dashboard采用Vue 3 + Vite技术栈构建:没有独立的前端服务器,整个编译后的应用直接由 Python Web 服务同源托管。这篇文章带你快速看懂 treg 的前端架构、Vite 双构建流水线、懒加载策略与本地开发配置,帮助你以最低成本跑起并改造这个 Dashboard。

一、前端定位:只有一个 Dashboard

treg 的前端遵循"单一事实来源"原则:

  • 所有入口(登录前后、目录页、分享链接)都提供同一套编译产物,源码全部位于 frontend/ 目录
  • 没有第二套生产前端,Python 后端(端口 18790)直接吐出编译好的index.html与静态资源
  • 构建产物写入src/treg/web/dashboard/,被 Git 忽略、随 Python 安装包分发

这意味着:改前端 → 重新构建 → Python 服务即刻生效,回滚只需部署上一个构建版本。

二、技术栈速览

来自 frontend/package.json:

组件版本角色
Vue3.5.41核心框架(仅打包 runtime,不含模板编译器)
Vite8.3.0开发服务器 + 构建
TypeScript5.9.3类型系统(vue-tsc检查)
Vitest5.0.1单元测试
Playwright1.63.0浏览器端到端测试
@fontsource/*5.3.0同源自托管字体(Geist Pixel / DM Mono)

注意engines要求Node ≥ 22.12,升级 Node 前请先确认本地版本。

三、目录结构与模块划分

Dashboard 源码组织在 frontend/src/,各目录职责清晰:

frontend/src/ ├── App.vue # 应用外壳:按视图条件挂载页面与对话框 ├── views.ts # 页面/对话框的按需加载注册表 ├── main.ts # 入口:挂载 App、注册 v-dialog 指令、字体 ├── api.ts # 同源 JSON 传输层(会话过期、边缘编码) ├── pages/ # 15 个页面:目录、活动、工具、团队、Hub 等 ├── components/ # 共享导航与 UI 组件 ├── dialogs/ # 17 个对话框(连接 Token、充值、分享…) ├── agent-setup/ # 与独立 Enrich Arena 页共享的 onboarding 组件 └── state/ # 按功能拆分的状态模块(Options API)

状态层是这套架构的特色:state/controller.js 把session、team、billing、catalog、hub等 30+ 个按功能分组的状态模块拼装成一个巨型控制器,再通过 state/context.ts 的provide/inject暴露给组件。这是"增量抽取"设计——旧模块共享应用级状态,新组件则被要求使用类型化的 props/events。

四、Vite 构建流水线:一次构建,两个产物

1. 主构建:Dashboard SPA

核心配置在 frontend/vite.config.ts:

  • base: '/app/ui/':所有资源挂在/app/ui/前缀下,由 Python 服务同源提供
  • outDir指向src/treg/web/dashboard:前端构建直接落进 Python 包目录,wheel/sdist 打包时自动带上
  • 代码分割:vue与@vue/*被单独拆成一个 chunk,利于跨页面缓存
  • 开发代理:Vite(5173 端口)把非/app/ui/的请求代理到本地 Python 服务(18790 端口),保证同源 Cookie 生效

2. 副构建:Enrich Arena 独立脚本

vite.agent-setup.config.ts 把 agent-setup/ 的同一批组件再编译一次,产出agent-setup.js——一个 IIFE 经典脚本(暴露为window.TregAgentSetup),供不使用 Vue 构建管线的独立 Arena 页运行,vue作为全局变量外挂。

两个构建串接在 package.json 的build脚本里:

bash scripts/build-dashboard.sh

完整流程 =vue-tsc类型检查 → Vite 主构建 → agent-setup 构建 → 拷贝 Vue 全局 runtime 与许可(copy-runtime.mjs)。

五、本地开发:Vite 热更新最快配置

三步跑起开发环境(详见 frontend/README.md):

  1. 安装 Node 22.12+ 与 npm
  2. 仓库根目录执行scripts/dev-local.sh up
  3. 打开http://localhost:18790/app——Python 响应里会动态加载 5173 端口的 Vite 模块,实现热更新

⚠️ 本地热更新依赖TREG_FRONTEND_DEV开关,不能与 PostgreSQL 或公网域名同时使用;要在局域网其他设备预览,先build再用TREG_FRONTEND_DEV=false重启。

六、加载策略:首屏快、后续不卡

views.ts 是全站的"按需加载中枢",两层机制让懒加载对用户完全无感:

  • preloadInitialView:入口执行时就根据 URL 解析目标页面,与/meta、/auth/me网络请求并行下载首个视图的 chunk
  • prefetchAfterBoot:启动完成后在浏览器空闲期(requestIdleCallback)逐个预取用户可达的页面与对话框 chunk,之后切换视图同步渲染、零白屏

传输层 api.ts 同样讲究:401 时自动触发会话过期跳转;大体积请求体(如导入 Skill 文件夹)在遇到边缘 403 时自动以 base64 编码重试,绕开 WAF 拦截。

七、质量保障:三层测试门禁

层级工具命令说明
类型vue-tscnpm --prefix frontend run check构建前强制通过
单元Vitestnpm --prefix frontend testtests/ 覆盖传输、存储等
E2EPlaywrightnpm --prefix frontend run test:e2e对构建产物跑 Chromium

E2E 有两点值得借鉴(playwright.config.ts):

  • 测试服务器使用OS 分配的随机空闲端口,多个 worktree 并行跑测试互不冲突
  • e2e/layout.spec.ts 在桌面与手机宽度下渲染主页面,自动检测文字互相覆盖、内容溢出、横向滚动等布局事故

八、上手清单 ✅

  1. 克隆仓库后先node -v确认 ≥ 22.12
  2. bash scripts/dev-local.sh up启动全栈,浏览器打开/app看热更新
  3. 改完前端务必bash scripts/build-dashboard.sh再跑 Playwright——浏览器测试只认构建产物
  4. 新增页面/对话框:在 views.ts 注册lazy()即可,切勿在 App.vue 里静态 import,否则它会被塞进每个访客都下载的首屏 chunk

总结:treg 的前端是一个"Python 同源托管的 Vue 3 单页应用"——Vite 双构建同时服务 Dashboard 与独立 Arena 页,views.ts的预加载/空闲预取让首屏与切换都很快,状态层则用 provide/inject 平滑兼容了旧的 Options API 模块。理解这套架构后,无论是加页面、调样式还是跑 E2E,你都已具备完整地图。🚀

【免费下载链接】tregOpenRouter for agent tools. Join community here: https://discord.gg/6mQYYfFMAn项目地址: https://gitcode.com/GitHub_Trending/treg/treg

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 18:23:43

我的世界联机教程:用樱花内网穿透实现异地好友联机

1. 为什么"我的世界"联机这件事值得单独拿出来聊 "我的世界"这个游戏,单机玩和联机玩完全是两个体验。单机是自己在世界里慢慢折腾,联机是几个朋友一起分工协作——有人挖矿、有人盖房、有人专门负责种地养动物,效率翻倍…

作者头像 李华
网站建设 2026/9/29 18:22:51

Steam下载“内容不可用”?给旧客户端补上Zstd解码器

我从2023年底开始一直在折腾一件事:让一台老旧Win7机器上的Steam恢复正常下载。如果你也守着Win7/8.1的“最后兼容版Steam”,大概率被“游戏下载到一半显示内容不可用”折磨过。这个问题我追了两个周末,最后定位到根因——Valve在服务端悄悄切…

作者头像 李华
网站建设 2026/9/29 18:22:08

多模态大模型:统一表征空间与跨模态智能落地

1. 多模态大模型不是“会看图说话”的升级版,而是认知架构的底层重写很多人第一次听说“多模态大模型”,下意识就把它理解成“在原有语言模型基础上加了个图像识别模块”——就像给一台只会打字的电脑装上摄像头,以为它就能看懂照片了。这种理…

作者头像 李华
网站建设 2026/9/29 18:20:18

PHP网约车H5打车系统:双端源码部署与订单流转实战解析

简介:这是一套基于PHP开发的网约车H5打车系统源码,完整涵盖乘客端与司机端,面向PHP开发者、移动端H5学习者及需要搭建网约车平台原型的个人或团队,适合作为毕设项目、课程实践或商业项目起步代码。压缩包共2000个文件,…

作者头像 李华
网站建设 2026/9/29 18:19:05

SRGAN超分辨率重建实战:对抗训练如何重构图像高频细节

简介:SRGAN超分辨率重建项目完整源码包,面向深度学习、图像处理方向的开发者与研究者,核心解决低分辨率图像到高分辨率图像的细节恢复与纹理增强问题。压缩包共29个文件,其中8个Python脚本覆盖数据预处理、网络结构、感知损失与对…

作者头像 李华
网站建设 2026/9/29 18:18:54

C++设计原则实战:八大原则如何指导现代C++代码重构

1. 为什么这八大原则不是“教条”,而是你写C时每行代码背后的呼吸节奏你有没有过这样的时刻:刚写完一个类,编译通过、功能跑通,心里还美滋滋地想着“这设计真优雅”;结果两周后加个新需求,改三行代码却要动…

作者头像 李华