news 2026/10/23 21:10:57

ScrollToPrompt工程化实践:TypeScript、Vitest与GitHub Actions构建可靠扩展

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ScrollToPrompt工程化实践:TypeScript、Vitest与GitHub Actions构建可靠扩展

【免费下载链接】ScrollToPrompt

Navigation minimap extension for modern AI chat interfaces, injecting responsive scrollbar indicators via Shadow DOM isolation.

项目地址:https://gitcode.com/gh_mirrors/sc/ScrollToPrompt
点击查看免费下载

ScrollToPrompt 是一款面向 ChatGPT、Claude、Gemini 等 AI 聊天界面的浏览器扩展,它为长对话注入"小地图式"的滚动条标记,让你一键跳回任意历史提问。这个项目的工程化做得相当扎实:用TypeScript 严格模式兜底类型安全、用Vitest跑单元测试、再用GitHub Actions把 Lint、构建、测试串成一条自动流水线。本文带你拆解这套浏览器扩展工程化的完整思路,新手也能照抄。

一、先看这个扩展做什么

ScrollToPrompt 的核心体验是:在 AI 聊天页的滚动区域注入一条自定义滚动条,每个提问(prompt)对应一个可视化标记;对话再长,上下文也只需一次点击就能找回。

几个值得学习的设计点:

  • Shadow DOM 隔离:整个 UI 包在独立的 Shadow DOM 里,宿主网站的 CSS 完全污染不了它;
  • 适配器模式:每个平台(ChatGPT、Claude、Gemini、Perplexity、Grok)各写一个适配器类,核心引擎与平台逻辑零耦合;
  • 性能意识:MutationObserver监听 DOM 变化后做 120ms 防抖渲染,拖拽和滚动走requestAnimationFrame,保证 60fps;
  • 隐私优先:零数据采集,所有逻辑本地运行。

📐 完整架构说明在 docs/architecture.md,建议配合源码阅读。

二、TypeScript 严格模式:可靠性的地基

很多扩展项目为了省事关闭严格检查,ScrollToPrompt 则反其道而行。看 tsconfig.json 的几个关键配置:

配置项值作用
stricttrue开启全套严格检查,空值、隐式 any 统统报错
target/moduleESNext使用现代语法,交给 Vite 做兼容性转译
noEmittruetsc 只做类型检查,不产出文件,构建交给 Vite
paths@/* → src/*路径别名,跨目录引用不用写一长串../

🎯 这套配置的思路是:tsc 负责"查错",Vite 负责"打包",各司其职。

类型约束真正发挥威力的地方是 src/core/Engine.ts 中的SiteAdapter接口:

  • 引擎只依赖这个接口,不关心具体是哪个平台;
  • 五个平台的实现(src/adapters/Platforms.ts)都implements SiteAdapter,漏写一个方法编译器直接报错;
  • 扩展 API 的类型由@types/chrome提供,chrome.storage、chrome.tabs等调用全程有提示。

这就是严格模式的最大红利:重构和加新功能时,类型系统帮你兜底。

三、构建工具链:Vite + CRXJS 一键产出扩展

浏览器扩展的构建比较特殊——要处理manifest.json、content script、service worker 等多个入口。ScrollToPrompt 选择 Vite 搭配@crxjs/vite-plugin来解决。

vite.config.ts 非常简洁:

  • 引入crx插件并传入 manifest.json 作为清单,插件自动识别 content script 和 service worker 入口;
  • 开发服务器固定5173端口,HMR 热更新,改完src/content/main.ts页面立即生效。

manifest.json 是标准Manifest V3声明:content script 只挂载到五个 AI 平台域名,run_at设为document_idle避免抢在页面加载前执行;权限只申请了storage一项,保持最小权限原则。

构建命令npm run build实际是tsc && vite build(见 package.json)——先让 tsc 完成类型检查,通过后再交给 Vite 产出dist目录,最后到chrome://extensions里"加载已解压的扩展程序"即可调试。

四、代码质量守门员:ESLint + Prettier + Husky

工程化不只是"能跑",还包括"任何人提交的代码都长一个样"。项目的组合拳是:

工具职责关键配置
ESLint静态检查lint脚本带--max-warnings 0,一个警告都不放过
Prettier统一格式一条命令格式化src/**下的 ts/css/md
Husky + lint-staged提交时自动执行git commit前只对本次改动的文件跑eslint --fix+prettier

lint-staged 的白名单配置在 package.json:TS 文件走 ESLint 自动修复 + Prettier,CSS 和 Markdown 只走 Prettier。

另外 .editorconfig 在编辑器层面统一了缩进与换行风格,.gitattributes 则声明了文本/二进制文件的换行规则,避免 Windows 和 Linux 协作者互相添乱。

💡 对新手来说,这套组合的价值在于:风格问题在提交前就被机器消灭了,代码评审可以专注逻辑本身。

五、Vitest 测试 + GitHub Actions:质量自动流水线

本地工具解决"个人习惯",CI 流水线解决"团队底线"。ScrollToPrompt 的 CI 配置在 .github/workflows/ci.yml,触发条件是push 到main分支和指向main的 Pull Request,在ubuntu-latest上依次执行:

  1. actions/checkout— 检出代码;
  2. actions/setup-node— 安装 Node.js 20,并开启npm依赖缓存(加速后续运行);
  3. npm ci— 按package-lock.json精确安装依赖,保证 CI 和本地装的是一模一样的版本;
  4. npm run lint— 静态检查不过,直接红灯;
  5. npm run build— 类型检查 + 完整构建验证;
  6. npm test— 启动 Vitest 的test脚本)。

🚦 这条流水线的设计很典型:Lint → Build → Test 三道闸口串行,任何一道失败 PR 就无法合并。对贡献者而言,提交前本地跑一遍npm run lint && npm test,就能和 CI 保持一致的结果。

项目同时提供了标准化的协作资产:

  • 结构化 Issue 模板:.github/ISSUE_TEMPLATE/bug_report.yml、.github/ISSUE_TEMPLATE/feature_request.yml;
  • PR 模板:.github/PULL_REQUEST_TEMPLATE.md,内置"是否通过自查、是否更新文档"等检查清单;
  • 贡献规范:CONTRIBUTING.md 明确要求"新增代码要补测试、改动 API 要同步文档"。

六、新手速查:本地开发一键命令

把日常命令整理成一张表,照着敲就能跑起来:

命令用途
npm install安装依赖(需 Node.js 18+)
npm run dev启动 Vite 开发服务器,HMR 热更新
npm run build类型检查 + 构建,产出dist
npm run lintESLint 全量检查
npm run formatPrettier 格式化
npm test运行 Vitest 测试

总结:可复制的工程化清单

ScrollToPrompt 用不到千行的代码量,搭出了一套生产级扩展该有的完整工程体系。如果你想给自己的扩展项目补课,可以直接抄这份作业:

  • ✅TypeScriptstrict模式 + 接口约束,让类型系统当第一道防线;
  • ✅tsc 只做检查、Vite 负责构建,工具链分工清晰;
  • ✅最小权限的 Manifest V3 声明,安全与体验兼顾;
  • ✅ESLint 零警告 + Prettier + lint-staged,把风格问题拦在提交前;
  • ✅GitHub Actions 串行执行 Lint / Build / Test,把质量底线交给自动化。

想深入了解各模块的设计决策,可以继续读 docs/architecture.md 与 ROADMAP.md,看看这个项目下一站要支持哪些平台。

【免费下载链接】ScrollToPrompt

Navigation minimap extension for modern AI chat interfaces, injecting responsive scrollbar indicators via Shadow DOM isolation.

项目地址:https://gitcode.com/gh_mirrors/sc/ScrollToPrompt
点击查看免费下载

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

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

辛积分器在MATLAB中的应用:实现哈密顿系统长期稳定仿真

简介:这是一份MATLAB环境下的辛积分器工具包,面向需要精确模拟哈密顿动力学系统的物理、天文与量子力学方向研究者和工程师。辛积分器能够在长时间数值模拟中保持能量和动量等守恒量,避免传统欧拉法或龙格-库塔法常见的能量漂移问题。包体共8…

作者头像 李华
网站建设 2026/10/23 21:05:36

Django实时日志系统:用AJAX轮询与subprocess实现Python任务输出实时展示

1. 项目概述先说清楚这个项目到底在解决什么问题。标题里的核心词拆开看就是:Django 后端跑一个 Python 任务,这个任务的 print 输出本来只出现在服务器终端里,现在我想让浏览器页面实时看到这些日志,而且要像终端滚动一样一行一行…

作者头像 李华
网站建设 2026/10/23 20:54:49

C# 与 .NET 零基础入门:从 Hello World 到第一个控制台程序

简介:这份C#入门经典教程以PPT形式系统梳理C#语言基础与.NET平台核心概念,面向零基础编程学习者、计算机专业学生以及希望转向.NET开发的初学者,帮助其建立从语言语法到运行机制的完整认知。压缩包内共1个PPT文件,约4.81MB&#x…

作者头像 李华
网站建设 2026/10/23 20:49:10

MATLAB信号处理实验全流程:从序列生成到FFT频谱分析与采样定理验证

简介:这份资源是南京邮电大学「信号分析与处理实验」课程的完整实验报告,面向正在修读数字信号处理、信号与系统相关课程的高校学生,以及需要借助 MATLAB 完成信号处理实验与课程设计的自学者。报告覆盖信号的产生和运算、连续时间信号的频域…

作者头像 李华
网站建设 2026/10/23 20:26:32

Python批量远程关机脚本:Windows局域网运维实战

简介:这是一份面向IT运维人员与Python学习者的Windows远程批量关机脚本资源,针对多台设备统一关机、故障排查与日常维护场景,提供可直接参考的自动化实现思路。压缩包共3个文件,以1个py脚本和2个txt说明文档为主,脚本承…

作者头像 李华
网站建设 2026/10/23 20:23:33

21-PEFT全景-为什么需要它六类方法一张表

PEFT 全景:为什么需要它,六类方法一张表看完 【大模型面试通关手册 第 21 篇】 本篇覆盖:PEFT 的三条成本约束、四种分类法与其"最终形态"、八种代表方法的定位、参数口径的三种算法、"FT vs LoRA"两处矛盾的变量分析、显存与速度对照表的正确读法、选…

作者头像 李华