如何在 Node 22 上启动 career-ops web(alpha)本地 Web 界面并读取现有 pipeline 与报告
【免费下载链接】career-opsOpen-source AI job search: scan job portals, evaluate listings into a structured A-H report with a global 1-5 score, tailor your CV, track applications — runs locally in your AI coding CLI (Claude Code, Codex, OpenCode, Antigravity…)项目地址: https://gitcode.com/GitHub_Trending/ca/career-ops
career-ops 的主体是一个本地运行的 AI 求职 CLI,而web/目录下附带了一个alpha 阶段、opt-in的本地 Web 界面:它不是第二套引擎,而是对 CLI 读写同一批文件(data/pipeline.md、data/applications.md、reports/、config/)的只读视图加少量回写能力。启动后,你已有的 CV、pipeline 记录和评估报告会原样出现在页面里,不运行它则 CLI 工作流完全不受影响。
本文的任务是:在 Node 22 环境把web/开发服务器跑起来,并确认它正确读取了你现有 checkout 中的 pipeline 与报告。
环境要求
web/package.json 中的engines.node为">=22.0.0",web/README.md 的 Quick start 也写明Requires Node 22+——原因是npm test用node --test "tests/**/*.test.mjs"这种 glob 发现测试,Node 22 之前的版本不展开 CLI glob,测试会静默失败;这是比next自身要求更高的下限。先确认本地版本:
node -v # 需要显示 22.x 或更高依赖方面,web/有自己独立的package-lock.json(仓库根目录和web/各有一份 lockfile,是有意为之),启动前只需在web/目录内安装一次依赖,不需要额外的数据库、服务或账号——整个应用 local-first,数据全部留在你自己的文件里。
启动开发服务器
主路径就三条命令,全部在web/目录内执行:
cd web npm ci npm run devnpm ci按 lockfile 安装依赖,保证与web/package.json声明一致(Next 版本为16.3.3)。npm run dev实际执行next dev,即 Turbopack 开发服务器(见 web/package.json 的scripts.dev)。
启动成功后在浏览器打开http://localhost:3000,这一步就是文档给出的成功判据:页面显示的是你所在的这个 career-ops checkout(web/的父目录)里的数据——已有的 CV、pipeline、报告原样出现,不需要任何导入或初始化。
它从哪里读取 pipeline 与报告
Web 端定位数据目录的逻辑在 web/src/lib/career-ops.ts 的careerOpsRoot()中,只有两种情况:
- 设置了环境变量
CAREER_OPS_ROOT(从web/.env.local读取)时,用它指定的目录; - 未设置时,默认取
web/的父目录,即当前 checkout 根。
基于这个根目录,各页面读取的具体文件是:
- Pipeline 页:解析
data/pipeline.md的- [ ] URL | Company | Role [| Location [| Compensation]] [| label: …]行,渲染为可排序、可过滤的表格;状态变更通过核心脚本回写,回写只走POST /api/status这一条路径(委托根目录的set-status.mjs),不做第二套实现; - Explore / Today / Analytics:还会读
data/scan-history.tsv等派生数据,缺失时对应功能静默降级而不是报错; - 报告查看:按
data/applications.md表格中 tracker 行的 report 链接定位reports/下对应.md文件,找不到时才回退到按reports/{n}-{slug}-{date}.md文件名匹配。
所以「读取现有 pipeline 与报告」不需要任何额外配置——只要这些文件存在于 checkout 的对应相对路径下,页面就会展示它们。
可选分支:如果你想让 Web 端指向另一份 career-ops 目录(例如用样例数据测试,避免动真实 pipeline),在web/.env.local中写一行:
CAREER_OPS_ROOT=/path/to/checkout/path/to/checkout替换为你实际的那份 checkout 路径。web/AGENTS.md 也建议测试时把CAREER_OPS_ROOT指到一个 scratch 目录,把真实 pipeline 隔离在外面。改完后重启npm run dev即可生效。
结果验证
- 浏览器打开
http://localhost:3000,确认 Pipeline 表格中能看到data/pipeline.md里的条目、tracker(data/applications.md)中的申请行,点开某一行能看到reports/中对应的评估报告内容。 - 如果页面显示空或数据与预期不符,先确认两件事:
web/所在的 checkout 是否正确(默认读父目录);web/.env.local是否设置了CAREER_OPS_ROOT把数据源指到了别处。这是文档指出的唯一两个数据源决定因素。 - 目标目录若既没有
cv.md也没有任何 pipeline/tracker 数据,首页会进入 first-run 引导分支(CV takeover);已有数据但个别配置缺失(config/profile.yml、modes/_profile.md、portals.yml)时只会在界面上给出 nudge 提示,不影响 pipeline 与报告的读取。
另外注意:一个文件不存在和文件损坏是两回事——例如portals.yml格式损坏时 Web 端会把它作为用户可见的错误暴露出来,而不是用仓库自带示例覆盖它。
限制与边界
- alpha 状态:web/README.md 明确标注 “Status: alpha. Expect rough edges”,行为可能随版本变化;问题反馈走项目 Discussion。
- API 有同源 + loopback 双重守卫:
/api默认只响应 loopback Host 的同源请求(实现见 web/src/lib/origin-guard.mjs)。两个可选的放宽项CAREER_OPS_WEB_ALLOWED_HOSTS(额外允许的 Host)与CAREER_OPS_ALLOWED_ORIGINS(额外允许的 Origin,例如chrome-extension://本地伴生客户端)默认都未设置,且都写在web/.env.local里——除非你要接入扩展类客户端,否则不需要碰。 - 永不自动提交:Apply 流程只做草稿和预填,提交按钮永远由人按,没有例外标志。
- 加法式集成:web 层与核心的打包、CI、发布互相隔离,不启动 Web 端时 CLI 行为不变。
生产构建方面,web/package.json 还提供了npm run build(next build)与npm run start(next start)两个脚本,日常使用本文的开发服务器路径即可。
【免费下载链接】career-opsOpen-source AI job search: scan job portals, evaluate listings into a structured A-H report with a global 1-5 score, tailor your CV, track applications — runs locally in your AI coding CLI (Claude Code, Codex, OpenCode, Antigravity…)项目地址: https://gitcode.com/GitHub_Trending/ca/career-ops
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考