这是把 D:/java/github 中旧版静态工具站迁移到 D:/java/blogs 的 Vue + Node.js 新项目。
当前仓库已完成本轮迁移主线:
- 中文
PLAN.md、迁移手册、SPEC 文档 - Vue 3 + Vite 前端骨架与页面路由
- Node.js + Express 后端骨架
- 部署模式解析与 GitHub Pages 兼容配置
- 项目仓库抽象层:服务端优先,本地回退;Pages 下自动本地模式
PointsBuilder高保真迁移Composition 专用 Builder独立桥接页Composition Builder旧版布局骨架、卡片工作台、动态预览、Builder / Bezier iframe 桥接、主题切换、分栏拖拽、JSON 导入导出、Kotlin 输出Shader Builder作为着色器编辑器恢复模型着色器 / 后处理页签、纹理库、后处理图、设置 / 快捷键弹窗、渲染预览、JSON 导入导出、Kotlin 输出- 首页恢复旧版卡片网格、主题切换、整卡点击与代码流展示;Generator、Bezier 页面入口补齐
- GitHub Actions Pages 自动部署工作流
- Express 可直接托管
apps/web/dist,支持单服务部署前端主页和/api
index:工具首页pointsbuilder:粒子样式生成器composition:Composition Buildercomposition-pointsbuilder:Composition 专用 Buildershader-builder:Shader Buildergenerator:粒子参数生成器bezier:Bezier 曲线工具
- 前端:Vue 3 + Vue Router + Vite + Three.js
- 后端:Node.js + Express
- 数据:服务端 JSON 持久化 + 前端本地存储降级
- 部署:GitHub Pages + GitHub Actions,或单独部署 Node 服务
apps/web:前端 Vue 项目apps/server:后端 Node.js 项目apps/web/src/pages:页面层apps/web/src/components:可复用组件apps/web/src/modules:各工具的领域模块apps/web/src/services:API、仓库抽象、导出、部署模式适配apps/server/src/routes:接口路由apps/server/src/services:业务逻辑.spec-workflow/specs/legacy-tools-vue-migration:迁移 SPEC 文档
- 在
D:/java/blogs执行npm install - 启动后端:
npm run dev:server - 启动前端:
npm run dev:web
默认地址:
- 前端:
http://localhost:5173 - 后端:
http://localhost:3001
本地开发模式特性:
- 前端默认使用服务端仓库模式
- 若 API 不可用,会自动降级到本地仓库模式
- 导出优先尝试后端,失败时回退本地文件下载
如果你希望主页和后端接口走同一个域名,当前仓库已经支持由 Express 同时托管前端构建产物和 /api。
构建与启动:
- 在仓库根目录执行
npm run build - 启动服务:
npm run start - 将整个仓库内容一并部署,至少要包含:
apps/serverapps/web/dist- 根目录
package.json/package-lock.json
部署后的效果:
GET /返回前端主页GET /api/social/bilibili/stat返回粉丝数据- 前端会默认请求同域
/api - 首页粉丝数可正常显示
这类部署适合 Render、Railway、Fly.io、云服务器 Docker、宝塔 Node 项目等可运行 Node.js 进程的平台。
2026-03-08 当前情况:GitHub Pages 仍然只能托管静态文件,不能运行 Node.js / Express 进程。
所以:
https://coostack.github.io这类 GitHub Pages 地址本身不能直接变成后端服务- 仅把前端发布到 Pages 时,首页粉丝数依赖的
/api/social/bilibili/stat不会在 Pages 上自动存在 - 想在 Pages 上继续显示粉丝数,只能额外部署一个后端,并把
VITE_API_BASE_URL指向那个后端地址
GitHub Actions 工作流文件:
.github/workflows/jekyll-gh-pages.yml
GitHub Actions 构建时会注入以下变量:
VITE_DEPLOY_TARGET=github-pagesVITE_APP_BASE=/<仓库名>/(若仓库名本身是<用户名>.github.io,则自动使用/)VITE_ROUTER_MODE=hashVITE_PROJECT_REPOSITORY_MODE=localVITE_API_BASE_URL=${{ vars.VITE_API_BASE_URL }}(可选;如配置为外部后端地址,Pages 页面也能拿到粉丝数)
如果你的目标是“同一个域名同时返回页面和接口”,请不要继续用 GitHub Pages 作为最终生产承载,而是改为部署 Node 服务,或者使用你自己的自定义域名反代到 Node 服务。
建议执行:
npm run buildnpm run build:web:github
预期结果:
- 单服务模式前端构建通过
- GitHub Pages 模式前端构建通过
- 存在单 chunk 体积告警时,一般不阻塞发布
D:/java/blogs/PLAN.mdD:/java/blogs/docs/migration-handbook.mdD:/java/blogs/.spec-workflow/specs/legacy-tools-vue-migration/requirements.mdD:/java/blogs/.spec-workflow/specs/legacy-tools-vue-migration/design.mdD:/java/blogs/.spec-workflow/specs/legacy-tools-vue-migration/tasks.md