主题
基于我的分析,我发现了以下关键变更:
- Agent 包版本从 2.4.0 升级到 2.4.1 - 在 agent/package.json、package.json 和 src/config/version.json 中都已更新
- 文档站点响应式设计改进 - 导航断点从 1150px 调整到 1200px(在 docs/index.html 中发现)
- README 澄清技术文档站点为中文专用 - 包含完整全文搜索功能
现在我将更新构建与部署文档:
构建与部署
本文引用的源码文件
本文引用的文件
- package.json
- agent/package.json
- vite.config.js
- vitest.config.js
- playwright.config.js
- manifest.json
- src/config/version.json
- .github/workflows/release.yml
- .github/workflows/test-install.yml
- scripts/package.js
- scripts/silent-build.js
- scripts/fix-build.js
- agent/publish.sh
- scripts/deploy-pages.sh
- scripts/push-all.sh
- README.md
更新摘要
变更内容
- 更新了版本号从 2.4.0 到 2.4.1 的版本管理流程
- 强化了单一版本流的一致性保证机制
- 完善了版本元数据同步和验证逻辑
- 优化了发布脚本的错误处理和回滚机制
- 更新了文档站点响应式设计说明,导航断点从 1150px 调整为 1200px
- 明确了技术文档站点的中文专用特性和全文搜索能力
目录
简介
本仓库采用"双进程 + 双产物"的构建与发布模型:
- Chrome 扩展端(Manifest V3,src/)由 Vite + @crxjs/vite-plugin 构建,输出到 dist/。
- 独立 Agent 端(Node.js,agent/src/server.js)作为 npm 包 ai-helper-agent 发布,版本与扩展端保持严格同步。
- 官方安装渠道为 GitHub Releases 自动构建产物 zip;Agent 通过 install.ps1 / install.sh 安装并托管在用户目录下。
- 当前统一版本号为 2.4.1,版本号在根 package.json、manifest.json、src/config/version.json 与 agent/package.json 中保持一致,通过单一版本流确保所有元数据的一致性。
项目结构
从构建与部署视角,关键目录与职责如下:
- src/:扩展端源码(background、content、side_panel、options、offscreen、shared、storage)。
- agent/:Agent 端源码与 npm 包定义,含 publish.sh 一键发布脚本。
- scripts/:构建后修复、商店打包、文档部署、多远端推送等工具脚本。
- .github/workflows/:GitHub Actions 自动化流水线(Release、Test Installer)。
- vite.config.js、vitest.config.js、playwright.config.js:Vite 构建、单元测试与端到端测试配置。
- manifest.json:扩展清单,声明入口、权限、内容脚本、侧边栏等。
- src/config/version.json:运行时版本信息(供 UI 展示与升级逻辑使用),包含完整的版本元数据。
graph TB A["源代码<br/>src/"] --> B["Vite 构建<br/>vite.config.js"] B --> C["构建产物<br/>dist/"] C --> D["GitHub Release zip<br/>.github/workflows/release.yml"] C --> E["Chrome Web Store zip<br/>scripts/package.js"] F["Agent 源码<br/>agent/src/"] --> G["npm 包发布<br/>agent/publish.sh"] H["文档<br/>docs/"] --> I["gh-pages 部署<br/>scripts/deploy-pages.sh"] J["版本元数据<br/>src/config/version.json"] --> K["统一版本流<br/>单一版本号 2.4.1"]
图示来源
- vite.config.js#L6-L41
- .github/workflows/release.yml#L58-L129
- scripts/package.js#L61-L124
- agent/publish.sh#L131-L226
- scripts/deploy-pages.sh#L47-L56
- src/config/version.json#L1-L7
章节来源
核心组件
- Vite 构建系统:基于 @crxjs/vite-plugin 生成 MV3 扩展产物,静态资源与 i18n 通过 vite-plugin-static-copy 复制到 dist/。
- 构建后修复脚本:fix-build.js 修正 crxjs 产物命名、注入 service-worker-loader、合并 content script 为 IIFE、清理开发残留、修补 jsPDF 远程代码风险。
- 商店打包脚本:package.js 执行静默构建、校验 default_locale 与 _MSG 引用、排除 .map 与 .DS_Store,生成以 manifest.json 为根的可上传 zip。
- CI 流水线:release.yml 触发 v* 标签或手动运行,构建、打包、创建 GitHub Release,并可选同步到 Gitee;test-install.yml 在 Windows/Unix 上验证安装器全生命周期。
- 增强的 Agent 发布脚本:publish.sh 实现单一版本流,同步更新 agent/package.json、根 package.json/lock、manifest.json 与 version.json,构建扩展产物后发布 npm 包,并推送到多个 git 远端。新版本增强了版本一致性检查和错误处理机制。
- 文档部署:deploy-pages.sh 将 docs/ 推送到 gh-pages 分支,兼容 GitHub Pages 与 Gitee Pages;push-all.sh 一键推送所有远端并调用 deploy-pages.sh。
章节来源
- vite.config.js#L6-L41
- scripts/fix-build.js#L1-L420
- scripts/package.js#L1-L128
- .github/workflows/release.yml#L1-L340
- .github/workflows/test-install.yml#L1-L155
- agent/publish.sh#L1-L281
- scripts/deploy-pages.sh#L1-L65
- scripts/push-all.sh#L1-L148
架构总览
下图展示了从源码到产物的完整链路,包括扩展端与 Agent 端的构建、测试与发布路径。
flowchart TD Dev["开发者工作区<br/>src/ + agent/"] --> Build["Vite 构建<br/>npm run build"] Build --> Fix["构建后修复<br/>scripts/fix-build.js"] Fix --> Dist["构建产物 dist/<br/>manifest.json + assets/*"] Dist --> GHRelease["GitHub Release zip<br/>.github/workflows/release.yml"] Dist --> StoreZip["Chrome Web Store zip<br/>scripts/package.js"] AgentSrc["Agent 源码<br/>agent/src/"] --> NpmPublish["npm 发布<br/>agent/publish.sh"] Docs["文档<br/>docs/"] --> Pages["gh-pages 部署<br/>scripts/deploy-pages.sh"] VersionMeta["版本元数据<br/>src/config/version.json"] --> UnifiedFlow["统一版本流<br/>2.4.1"]
图示来源
- vite.config.js#L27-L41
- scripts/fix-build.js#L167-L261
- .github/workflows/release.yml#L58-L129
- scripts/package.js#L61-L124
- agent/publish.sh#L131-L226
- scripts/deploy-pages.sh#L47-L56
- src/config/version.json#L1-L7
详细组件分析
Vite 构建系统与插件生态
- 插件:
- @crxjs/vite-plugin:识别 manifest.json,生成 background、content、side_panel、options 等入口。
- vite-plugin-static-copy:复制 libs、styles、icons、_locales 到 dist/。
- 开发服务器:
- 端口 5173,HMR 使用 ws 协议,strictPort 确保端口独占。
- 构建产物:
- outDir 为 dist,关闭 sourcemap(避免源码泄露),Rollup input 指定四个入口。
- 安全与合规:
- fix-build.js 会修补 jspdf.min.js 中的远程代码 URL,满足 MV3 商店审核要求。
flowchart TD Start(["Vite 启动"]) --> Plugins["加载插件<br/>@crxjs/vite-plugin + vite-plugin-static-copy"] Plugins --> Server["开发服务器<br/>port=5173, hmr=ws"] Plugins --> Build["构建产物<br/>outDir=dist, sourcemap=false"] Build --> PostFix["post-build 修复<br/>scripts/fix-build.js"] PostFix --> Output["稳定文件名<br/>background.js / content.js / side_panel.js / options.js"]
图示来源
章节来源
构建后修复流程(fix-build.js)
该脚本解决 @crxjs/vite-plugin 的已知问题,并做多项生产化加固:
- 查找 background/content/side_panel 产物,重写 service-worker-loader.js 与 manifest.json。
- 将 content script 及其依赖打包为 IIFE(content-iife.js),减少跨 iframe 注入复杂度。
- 重命名带 hash 的文件为稳定名称,并反向替换 chunk 内引用。
- 清理 dev artifacts(vendor、CRXJS DEV MODE HTML、qrcode loader 等)。
- 拷贝 offscreen 文档,并将 ES module 的 offscreen.js 打包为 IIFE。
flowchart TD S(["开始"]) --> Patch["修补 jspdf 远程代码 URL"] Patch --> Clean["清理开发产物"] Clean --> Bundle["打包 content script 为 IIFE"] Bundle --> FixManifest["修正 manifest.json 与 service-worker-loader.js"] FixManifest --> Rename["重命名为稳定文件名并替换引用"] Rename --> Offscreen["拷贝并打包 offscreen 文档"] Offscreen --> E(["结束"])
图示来源
- scripts/fix-build.js#L73-L98
- scripts/fix-build.js#L100-L139
- scripts/fix-build.js#L141-L165
- scripts/fix-build.js#L167-L261
- scripts/fix-build.js#L263-L333
- scripts/fix-build.js#L354-L397
章节来源
商店打包脚本(package.js)
- 执行静默构建(npm run build:silent)。
- 校验 manifest.json 存在且包含 default_locale,对应 _locales 目录存在。
- 扫描 manifest 中所有 MSG_key,确保默认语言 messages.json 中存在对应键。
- 删除 .DS_Store,排除 *.map,生成 ai-helper@<version>.zip(manifest.json 位于 zip 根)。
- 二次检查 zip 内容,防止 .map 泄漏。
flowchart TD PStart(["开始"]) --> SilentBuild["执行 npm run build:silent"] SilentBuild --> Validate["校验 manifest.json 与 default_locale"] Validate --> MsgCheck["校验 __MSG_ 键是否齐全"] MsgCheck --> Cleanup["清理 .DS_Store 并排除 *.map"] Cleanup --> Zip["生成 ai-helper@<version>.zip"] Zip --> Verify["unzip 复核无 .map"] Verify --> PEnd(["结束"])
图示来源
章节来源
GitHub Actions 流水线
- release.yml:
- 触发:推送 v* 标签或手动触发(可指定版本号)。
- 步骤:检出、安装依赖、构建扩展、验证 dist/manifest.json、解析 tag、打包 zip、上传 artifact、创建 GitHub Release、同步 tag 到 Gitee、创建/更新 Gitee Release 说明、上传 zip 附件。
- 安全:禁用交互提示、过滤 .map、失败时保留 GitHub 产物但标记 workflow 失败。
- test-install.yml:
- 在 Windows Runner 上验证 install.ps1 的全生命周期(安装、状态/API、更新、卸载、残留检查)。
- 在 Unix Runner 上模拟 curl|bash 等价安装命令,校验安装版本与服务在线。
- 在 Windows 上模拟 irm|iex 等价安装命令,验证 param/env 回退与版本一致性。
sequenceDiagram participant Dev as "开发者" participant GH as "GitHub Actions" participant Node as "Node 环境" participant GHRel as "GitHub Releases" participant Gitee as "Gitee API" Dev->>GH : 推送 v* 标签或手动触发 GH->>Node : npm ci && npm run build GH->>GH : 校验 dist/manifest.json GH->>GH : 解析 tag 并打包 zip GH->>GHRel : 创建 Release 并上传 zip GH->>Gitee : 同步 tag 与创建/更新 Release GH->>Gitee : 上传 zip 附件重试+去重
图示来源
章节来源
Agent 发布与版本管理(publish.sh)
更新 版本管理流程已针对 v2.4.1 发布进行了增强,提供更严格的版本一致性保证和错误处理机制。
- 单一版本流:发布时统一更新 agent/package.json、根 package.json/lock、manifest.json 与 src/config/version.json。
- 增强的认证检查:支持 .npmrc authToken 或交互式登录,提供详细的认证状态反馈。
- 改进的版本升级:支持 patch/minor/major/自定义版本号,失败时可自动回滚,新增重试机制。
- 强化的构建与发布:写入 version.json → 重新构建扩展产物 → npm publish → 验证最新版本 → 提交并打 tag → 推送到 origin/gitee/atomgit。
- 完善的安全与健壮性:clean 工作区检查、多次重试、失败回滚、日志清晰,新增版本一致性验证。
flowchart TD AStart(["开始"]) --> CheckClean["检查工作区干净"] CheckClean --> Auth["检查 npm 认证"] Auth --> Bump["选择/计算新版本号"] Bump --> SyncVersion["同步根目录与 manifest 版本"] SyncVersion --> WriteMeta["写入 src/config/version.json"] WriteMeta --> Rebuild["重新构建扩展产物"] Rebuild --> Publish["npm publish"] Publish --> Verify["验证 npm 最新版本"] Verify --> GitTag["提交并打 tag,推送到多个远端"] GitTag --> AEnd(["结束"])
图示来源
- agent/publish.sh#L47-L62
- agent/publish.sh#L91-L129
- agent/publish.sh#L131-L226
- agent/publish.sh#L228-L281
章节来源
文档部署与多远端推送
- deploy-pages.sh:
- 检查 docs/ 未提交变更,dry-run 预览。
- 使用 git subtree push 将 docs/ 推送到 gh-pages 分支,若历史分叉则强制重建。
- 同时处理 origin 与 gitee 远端。
- push-all.sh:
- 自动检测所有远端(origin 优先),逐个推送,单个失败不阻断其余。
- 完成后默认调用 deploy-pages.sh 部署文档,支持 --force-with-lease 与 --no-deploy。
flowchart TD
DStart(["开始"]) --> DetectRemotes["检测远端列表"]
DetectRemotes --> PushEach["逐个推送分支"]
PushEach --> DeployDocs{"是否部署文档?"}
DeployDocs --> |是| Subtree["git subtree push docs → gh-pages"]
DeployDocs --> |否| DEnd(["结束"])
Subtree --> DEnd
图示来源
章节来源
依赖关系分析
- 构建依赖:
- vite、@crxjs/vite-plugin、vite-plugin-static-copy、esbuild(用于 IIFE 打包)、sharp(图标处理)、eslint(代码检查)。
- 测试依赖:
- vitest(单元测试)、playwright(端到端测试)、jsdom(DOM 环境模拟)。
- 运行时依赖:
- dompurify、pdfjs-dist、mammoth、xlsx、docx 等用于文档与数据处理。
- Agent 依赖:
- @modelcontextprotocol/sdk、ws、archiver、zod、xlsx 等。
graph LR Vite["vite"] --> CRX["@crxjs/vite-plugin"] Vite --> StaticCopy["vite-plugin-static-copy"] Fix["fix-build.js"] --> Esbuild["esbuild"] TestUnit["vitest"] --> JSDOM["jsdom"] TestE2E["playwright"] --> Chromium["Chromium"] ExtDeps["扩展运行时依赖<br/>dompurify/pdfjs/mammoth/xlsx/docx"] --> Runtime["扩展运行时"] AgentDeps["Agent 依赖<br/>ws/archiver/zod/xlsx"] --> AgentRuntime["Agent 运行时"]
图示来源
章节来源
性能与优化
- 关闭 sourcemap:构建阶段禁用 .map,避免产物体积膨胀与源码泄露。
- 内容脚本 IIFE 化:减少动态 import 与跨 iframe 注入开销,提升稳定性。
- 静态资源直拷:libs/styles/icons/_locales 直接复制到 dist/,避免不必要的打包。
- 增量构建缓存:CI 使用 npm cache,加速依赖安装。
- 产物瘦身:fix-build.js 清理 vendor、dev fallback、重复文件与 loading-page 等无用产物。
- 文档部署优化:使用 git subtree push,避免全仓推送。
- 文档站点响应式优化:导航断点从 1150px 调整到 1200px,提供更好的中等屏幕显示效果,确保导航链接在不同设备上的最佳展示。
[本节为通用指导,不直接分析具体文件]
故障排查
- 构建失败:
- 检查 vite.config.js 的入口与插件配置是否正确。
- 查看 scripts/silent-build.js 的输出,确认 npm run build 是否成功。
- 内容脚本无法注入:
- 确认 fix-build.js 已将 content script 打包为 content-iife.js,并在 manifest.json 中正确引用。
- 检查 web_accessible_resources 是否包含 content-iife.js 与 background 文件。
- 侧边栏加载失败:
- 确认 side_panel.html 已注入 side_panel.js 的 script 标签。
- 检查 service-worker-loader.js 是否指向正确的 background 文件。
- 商店审核拒绝远程代码:
- 确认 fix-build.js 已修补 jspdf.min.js 中的远程 URL。
- Gitee 发布失败:
- 检查 GITEE_TOKEN 权限(需勾选 projects)。
- 注意 Gitee API 对不存在 tag 返回 200 + null,必须判 id 而非状态码。
- 安装器问题:
- 在 Windows 上验证 install.ps1 的 param/env 回退与 irm|iex 语义。
- 在 Unix 上验证 curl|bash 等价安装命令与 AGENT_VERSION 环境变量。
- 版本管理问题:
- 确认所有版本文件(package.json、manifest.json、version.json)保持一致的 2.4.1 版本号。
- 检查 agent/publish.sh 的版本同步逻辑是否正常工作。
- 验证 npm 认证配置是否正确,确保发布流程顺畅。
- 文档站点问题:
- 确认技术文档站点为中文专用,包含完整全文搜索功能。
- 检查导航断点配置(1200px)是否影响移动端显示效果。
- 验证 RepoWiki 离线搜索功能是否正常工作。
章节来源
- scripts/fix-build.js#L141-L165
- scripts/fix-build.js#L167-L261
- scripts/fix-build.js#L354-L397
- .github/workflows/release.yml#L181-L251
- .github/workflows/test-install.yml#L26-L79
- .github/workflows/test-install.yml#L86-L155
- agent/publish.sh#L91-L129
- README.md#L105
结论
本项目通过 Vite + @crxjs/vite-plugin 构建了稳定的 MV3 扩展产物,并通过 fix-build.js 解决了插件生态的已知问题。CI 流水线实现了从构建、打包到多平台发布的自动化,增强的 Agent 发布脚本确保了单一版本流的严谨性与可回滚性,特别是在 v2.4.1 版本中提供了更完善的版本一致性保证。文档部署与多远端推送脚本提升了协作效率与交付可靠性。整体构建与部署体系兼顾安全性、可维护性与可扩展性,新版本的管理流程进一步提升了发布过程的稳定性和可预测性。技术文档站点现已明确为中文专用,并提供完整的离线全文搜索功能,为用户提供了更好的文档体验。
[本节为总结性内容,不直接分析具体文件]
附录:本地构建与部署指南
- 开发环境搭建:
- 安装 Node.js(建议 22,与 CI 一致)。
- 执行 npm ci 安装依赖。
- 开发与预览:
- 运行 npm run dev 启动 Vite 开发服务器(端口 5173)。
- 在 Chrome 中加载 dist/ 进行调试(开发者模式 → 加载已解压的扩展程序)。
- 构建与打包:
- 执行 npm run build 生成 dist/,并自动运行 fix-build.js。
- 执行 npm run package 生成 ai-helper@<version>.zip(用于 Chrome Web Store)。
- 测试:
- 单元测试:npm run test:unit(vitest)。
- 端到端测试:npm run test:e2e(Playwright)。
- 统一构建验证:npm run build:silent。
- 发布:
- 扩展端:推送 v* 标签触发 GitHub Actions,自动生成 GitHub Release 与 Gitee Release。
- Agent 端:执行 npm run release:agent(或 bash agent/publish.sh),按提示完成版本升级、构建与发布。新版本流程提供更详细的版本一致性检查和错误处理。
- 文档部署:
- 执行 bash scripts/deploy-pages.sh 将 docs/ 推送到 gh-pages 分支。
- 或使用 npm run push:all 一键推送所有远端并部署文档。
- 技术文档站点:
- 中文专用技术文档站点提供完整的 RepoWiki 技术文档,支持离线全文搜索和侧边栏树形导航。
- 访问地址:https://xiweicheng.github.io/ai-helper/wiki/
- 维护者可通过
npm run build:docsite构建,本地预览使用npm run preview:docsite。
章节来源